понедельник, 1 июня 2020 г.

Неочевидное поведение функций конвертации даты

Продолжаем изучать неочевидное поведение функций php.

Рассмотрим такой код:

$var = strtotime(date('d.m.Y', time()));

Кажется, что здесь выполняется лишняя работа. Сначала мы берем таймштамп, возвращаемый функцией time(), и на его основе получаем строку времени определенного формата. Далее мы преобразуем полученную строку времени обратно в таймштамп. И логично, что таймштампы должны совпадать. Но нет.

Неочевидность в том, что строка времени в формате "d.m.Y" преобразуется в таймштамп начала дня, то есть "d.m.Y" аналогичен "d.m.Y 00:00:00".

Добавляем немного вывода и видим:

$ts = time();

$var = strtotime(date('d.m.Y', $ts));

var_dump(date('d.m.Y H:i:s', $ts));    // string(19) "01.06.2020 22:36:09"
var_dump(date('d.m.Y H:i:s', $var));   // string(19) "01.06.2020 00:00:00"

$varDayStart = strtotime(date('d.m.Y 00:00:00', $ts));
var_dump($var === $varDayStart);    // bool(true)


Таким образом, данный код можно считать одним из способов получения таймптампа начала текущего дня.

Комментариев нет:

Отправка комментария