В настоящее время у меня есть дата в формате: день, день, месяц, год, 24 часа, с секундами и часовым поясом. Я хочу вставить это в Y-m-d.
Текущая дата:
Fri, 23 Mar 2018 20:28:34 0000
Дата окончания:
2018-03-23
Для этого я использую PHP. Дата жестко запрограммирована, поэтому я вообще не могу вызвать функцию date ().
@Syscall, это правильный да!
Почему вы не можете вызвать функцию даты? Как вы пробовали использовать функцию даты?
@Andreas Дата жестко запрограммирована как статическое значение при отправке. Мне нужно изменить формат, чтобы вставить его в другое приложение.






Вы можете использовать createFromFormat() для преобразования даты:
$str = "Fri, 23 Mar 2018 20:28:34 0000";
$str = preg_replace('~\s(\d{4})$~', '+$1', $str); // change '0000' to '+0000'
$d1 = DateTime::createFromFormat("D, d M Y H:i:s O", $str) ;
echo $d1->format("Y-m-d") ;
// or
// echo date("Y-m-d", strtotime($str)) ;
Выходы:
2018-03-23
Или, как указал @Andreas, вы можете использовать substr() для удаления часового пояса:
$str = "Fri, 23 Mar 2018 20:28:34 0000";
$str = substr($str, 0,-5) ;
echo date("Y-m-d", strtotime($str)) ;
str_replace(' 0000', '+0000', $str) разве не жестко запрограммирован? Этот ответ действителен только в одном конкретном случае.
@Andreas Согласен. Я улучшу это.
Я бы предпочел использовать substr($str, 0,-5), все еще достаточно жестко запрограммированный, но, по крайней мере, гибкий в отношении часовых поясов.
@Andreas Верно, хорошее решение. Я перешел на preg_replace(). Как вы думаете, это могло бы быть более гибким?
Конечно. Но регулярное выражение, вероятно, слишком мощно для такой простой задачи. Но это сработает. Regex, вероятно, безопаснее, чем substr, если часовой пояс по какой-то причине отсутствует. Но если вы можете доверять формату, тогда substr будет быстрее, ну ... не то чтобы вы этого когда-либо заметили. Но ты знаешь.
Другая альтернатива:
$str = "Fri, 23 Mar 2018 20:28:34 0000";
$str = trim( preg_replace( "/[0-9\+]*$/", "", trim($str) ) );
echo date( "Y-m-d", strtotime($str) );
Выход:
2018-03-23
2кстрим? Хорошо .. теперь я все это видел.
Принято в качестве ответа ввиду удобочитаемости, простоты и легкости. Спасибо!
Читаемость? Не ожидал этого.
Вы можете попробовать использовать этот код
echo date( "Y-m-d", strtotime(preg_replace( "/[0-9]+$/", "", "Fri, 23 Mar 2018 20:28:34 0000")) );
Это даст тот же ответ, который вам нужен
Если дата жестко запрограммирована, как вы говорите, это означает, что у нее всегда будет трехбуквенный день, запятая, затем дата, затем время и часовой пояс. Длина строки всегда должна быть одинаковой. Это можно использовать с пользой.
$str = "Fri, 23 Mar 2018 20:28:34 0000";
Echo date("Y-m-d", strtotime(substr($str,5,11)));
Здесь я использую только 23 Mar 2018 в функции strtotime и date.
Нет необходимости в регулярном выражении, обрезке или добавлении + или - к часовым поясам.
Вы имеете в виду, что вам переменная вроде
$str = "Fri, 23 Mar 2018 20:28:34 0000"?