PHP изменить формат даты с длинной даты со временем на базовую дату

В настоящее время у меня есть дата в формате: день, день, месяц, год, 24 часа, с секундами и часовым поясом. Я хочу вставить это в Y-m-d.

Текущая дата:

Fri, 23 Mar 2018 20:28:34  0000

Дата окончания:

2018-03-23

Для этого я использую PHP. Дата жестко запрограммирована, поэтому я вообще не могу вызвать функцию date ().

Вы имеете в виду, что вам переменная вроде $str = "Fri, 23 Mar 2018 20:28:34 0000"?

Syscall 24.03.2018 10:00

@Syscall, это правильный да!

Jake S 24.03.2018 10:04

Почему вы не можете вызвать функцию даты? Как вы пробовали использовать функцию даты?

Andreas 24.03.2018 10:15

@Andreas Дата жестко запрограммирована как статическое значение при отправке. Мне нужно изменить формат, чтобы вставить его в другое приложение.

Jake S 24.03.2018 10:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
55
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать 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 24.03.2018 10:09

@Andreas Согласен. Я улучшу это.

Syscall 24.03.2018 10:12

Я бы предпочел использовать substr($str, 0,-5), все еще достаточно жестко запрограммированный, но, по крайней мере, гибкий в отношении часовых поясов.

Andreas 24.03.2018 10:13

@Andreas Верно, хорошее решение. Я перешел на preg_replace(). Как вы думаете, это могло бы быть более гибким?

Syscall 24.03.2018 10:14

Конечно. Но регулярное выражение, вероятно, слишком мощно для такой простой задачи. Но это сработает. Regex, вероятно, безопаснее, чем substr, если часовой пояс по какой-то причине отсутствует. Но если вы можете доверять формату, тогда substr будет быстрее, ну ... не то чтобы вы этого когда-либо заметили. Но ты знаешь.

Andreas 24.03.2018 10:18
Ответ принят как подходящий

Другая альтернатива:

$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кстрим? Хорошо .. теперь я все это видел.

Andreas 24.03.2018 10:20

Принято в качестве ответа ввиду удобочитаемости, простоты и легкости. Спасибо!

Jake S 24.03.2018 10:29

Читаемость? Не ожидал этого.

Andreas 24.03.2018 10:31

Вы можете попробовать использовать этот код

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. Нет необходимости в регулярном выражении, обрезке или добавлении + или - к часовым поясам.

Другие вопросы по теме