PHP Date - странный расчет даты

Я пытался округлить время до целой минуты (как часть большего механизма округления). В моих модульных тестах я понял что-то странное, этот код:

echo date('Y-m-d H:i:00', strtotime('2018-09-31 19:39:45'));

результат в:

2018-10-01 19:39:00

Что я делаю неправильно?

Примечание: я запускал это на 2018-10-01

http://sandbox.onlinephpfunctions.com/code/1cb0dd98e9d540616d02ce2d5c00684800af8597

1 ответ

Решение

strtotime() не проверяет даты.

Если вы делаете

echo date('Y-m-d H:i:00', strtotime('2018-02-30 19:39:45'));

Выходы

2018-03-02 19:39:00

Итак, проблема здесь в том, что вы используете "недопустимую" дату, а PHP суммирует секунды. Итак, 31 сентября означает 30 сентября + 24 часа (в секундах). Когда ты бежишь date() получит дату в секундах и покажет вам действительную дату, первое октября.

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