Временная зона в PHP. Важная мелочь.
Разные задачи приходится решать. На этот раз задача была лёгкой, но только с одной стороны.
Задача: показ телефона только в рабочее время. То есть с 9 утра до 17 вечера, кроме субботы и воскресенья.
Условие было составлено следующее:
//Время суток в формате 24 часа
$time = date('G');
//на всякий случай подводим под численный тип
$time = (int) $time;
//День недели 1 — понедельник, 7 - воскресенье
$day = date('N');
//на всякий случай подводим под численный тип
$day = (int) $day;
//условие
if(($time < 16 and $time >= 9) and ($day <= 6)){
echo 'Номер телефона';
}
Из условия видно, что оно сработает по всем дням, кроме воскресения и в период между 9:00 и 15:59.
Но не задача. Условие не срабатывало так как надо. И много было дум, почему же? И условие переправлял и проверял всё 100 раз, пока не вывел переменную $time
и увидел что разница, аж в 2 часа!
Всё стало ясно необходимо указать интерпретатору временную зону, для этого идём в php.ini.
php.ini — это конфигурационный файл, содержащий настройки интерпретатора PHP.
У меня он лежит по следующему пути:
/etc/php/7.0/fpm/php.ini
Чтобы узнать путь к ini файлу - можно вызвать phpinfo()
- в выдаче будет путь к ini файлу.
Если у вас другая версия PHP или он установлен не как PHP-FPM в Nginx - то путь у вас будет другой.
Ищем в нём строку date.timezone
и видим, что она пуста да ещё и закомментирована.
Меняем
;date.timezone=
на
date.timezone=Europe/Moscow
И перезапускаем service php7.0-fpm restart
. И всё, Profit.
Вот так, на первый взгляд простая задача, заняла 2 дня).
Данный пост подготовлен автором @zheev.
Заглавная картинка с сайта worldfb.ru