Дата, время, часовые пояса

Работать с датами в PHP довольно просто, но когда дело доходит до работы с часовыми поясами всё становится не так просто.

Чтобы было проще работать с датами и временем в JohnCMS достаточно придерживаться простых правил:

  • Все даты в базе данных должны храниться в UTC

  • Все даты при выводе должны выводиться в часовом поясе пользователя

Для упрощения работы в JohnCMS есть несколько вспомогательных методов для работы с датами.

Выводим дату и время в пользовательском формате с учетом его часового пояса:

$time = '18.02.2023 13:46';
echo \Johncms\Utility\DateTime::userFormat($time);

Выводим дату и время в определенном формате с датой и временем без учета настроек формата пользователя:

$time = '18.02.2023 13:46';
echo \Johncms\Utility\DateTime::format($time);
// Вывод только даты без времени
echo \Johncms\Utility\DateTime::format($time, true);
// Вывод со временем, но без секунд
echo \Johncms\Utility\DateTime::format($time, false, true);

Выводим дату и время в упрощенном формате (2 часа назад, 3 секунды назад и т.д.)

$time = '18.02.2023 13:46';
echo \Johncms\Utility\DateTime::calendarFormat($time);

А теперь рассмотрим подготовку даты и времени для записи в БД:

$time = '18.02.2023 13:46';
$preparedTime = \Johncms\Utility\DateTime::prepareForDatabase($time);
// Если не нужно учитывать часовой пояс
$preparedTime = \Johncms\Utility\DateTime::prepareForDatabase($time, false);

Эта вспомогательная функция будет полезна если пользователь где-либо на сайте может указывать дату и время. Т.к. пользователь указывает время в своем часовом поясе, то перед сохранением в БД или куда-либо ещё его необходимо сначала привести к UTC.

Обратите внимание, что стандартные функции php такие как date() и time() будут возвращать дату и время в UTC, по этому если вы используете их при записи в БД, дополнительно менять часовой пояс для них не нужно. Достаточно только при выводе воспользоваться одной из вспомогательных функций выше.

Last updated