createFromFormat дает мне неправильные результаты

Я хочу преобразовать форму даты из д / м / г в Y-м-д со смещением часового пояса. Я могу конвертировать из д / м / Y в Y-м-д с помощью этого кода:

$date = DateTime::createFromFormat('d/m/Y', $date);
$date = $date->format('Y-m-d');

Это работает в некоторой степени, но когда я встречаю дату, как это:

echo DateTime::createFromFormat('d/m/Y h:m:s', '19/07/2017 00:00:00');
results is 2016-12-19 00:00:00.000000
echo DateTime::createFromFormat('d/m/Y h:m:s', '20/07/2017 22:51:17');
results is false

РЕДАКТИРОВАНИЕ
Теперь, используя предложенный формат

DateTime::createFromFormat('d/m/Y H:i:s', '19/07/2017 00:00:00');

Ожидаемый результат:

06/06/2017 00:00:00 => 2017-06-06 00:00:00.000000
06/06/2017 12:31:34 => 2017-06-06 12:31:34.000000
08/06/2017 21:59:21 => 2017-08-06 21:59:21.000000
19/07/2017 00:00:00 => 2018-07-07 00:00:00.000000 wrong!
20/07/2017 22:51:17 => 2018-08-07 22:51:17.000000 wrong!
21/07/2017 23:39:23 => 2018-09-07 23:39:23.000000 wrong!
27/07/2017 02:46:14 => 2019-03-07 02:46:14.000000 wrong!

1

Решение

использование H а также i вместо. Также Вы не можете повторить использование объекта print_r вместо.

Попробуй с примером

H для 24-часового формата.

i за минуты с ведущими нулями

Измените это на:

echo DateTime::createFromFormat('d/m/Y h:m:s', '19/07/2017 00:00:00');

Это:

print_r(DateTime::createFromFormat('d/m/Y H:i:s', '19/07/2017 00:00:00'));

Для получения определенного формата

$dateObject=DateTime::createFromFormat('d/m/Y H:i:s', '19/07/2017 00:00:00');
echo $dateObject->format("Y-m-d H:i:s");
1

Другие решения

Пожалуйста, попробуйте это

$date = DateTime::createFromFormat('d/m/Y H:i:s', '20/07/2017 22:51:17');
echo date_format($date, 'Y-m-d H:i:s');
0

Объяснить Зачем это дает вам такие результаты:

Ваша строка формата даты содержит m дважды, вторая из которых читает «минуты» часть времени. Это перезаписывает предыдущее, правильное значение месяца. Так как ваша первая строка (19/07/2017 00:00:00) имеет ноль минут DateTime объект инициализируется до «0-го» месяца — в PHP это приводит к откату даты на один месяц к предыдущему году, поэтому вы видите декабрь 2016 года.

Ваша вторая строка (20/07/2017 22:51:17), потому что вы используете h анализ 24-часового времени — это не удастся при разборе любого числа выше 12.

Как объясняется в других ответах, правильная строка формата для этих дат d/m/Y H:i:s,

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector