Часовой пояс сервера — системная настройка Linux, определяющая, какое локальное время используется операционной системой и приложениями при работе с датами и временем. Неверный или несогласованный часовой пояс — распространённая причина ошибок в логах, расписаниях crontab, записях в базе данных и отображении дат в приложениях.
Как настроить часовой пояс
На уровне операционной системы (Linux):
# Просмотр текущего часового пояса
timedatectl
# Установить московское время (UTC+3)
timedatectl set-timezone Europe/Moscow
# Или через симлинк (старый метод)
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
# Проверить
date
Часовой пояс PHP настраивается в php.ini или в коде:
# php.ini
date.timezone = Europe/Moscow
# В PHP-скрипте
date_default_timezone_set('Europe/Moscow');
MySQL имеет собственный часовой пояс, независимый от системного:
-- Просмотр
SELECT @@global.time_zone, @@session.time_zone;
-- Установить в my.cnf
[mysqld]
default-time-zone = '+03:00'
-- В сессии
SET time_zone = 'Europe/Moscow';
UTC как стандарт
Профессиональный подход — хранить все временны́е метки в БД в UTC, конвертировать в локальное время на уровне приложения при отображении. Это исключает проблемы с переходом на летнее время (DST) и позволяет обслуживать пользователей из разных часовых поясов без изменения данных.
Россия отменила переход на летнее время в 2014 году, зафиксировав UTC+3 (Москва). До 2014 года серверы на Moscow/UTC+4 (летом) создавали путаницу в логах при переходе. На серверах с UTC+3 эта проблема устранена.
История
Часовые пояса введены в 1884 году на Международной меридианной конференции в Вашингтоне. В Linux время хранится как Unix timestamp (секунды с 1 января 1970 года 00:00:00 UTC). База данных часовых поясов IANA (Olson database) — стандарт идентификаторов (America/New_York, Europe/Moscow). Россия унифицировала часовые пояса несколько раз: в 2010 году сократила их с 11 до 9 и отменила летнее время; в 2014 году перевела стрелки постоянно на UTC+3 для Москвы.
На что обращать внимание
Наиболее частые проблемы: задачи в crontab выполняются не в то время (сервер в UTC, ожидается Moscow); временны́е метки в MySQL и PHP отличаются (разные часовые пояса); логи Nginx и Apache в разных поясах при изменении конфига. После смены часового пояса перезапустите PHP-FPM, MySQL и nginx: они кэшируют системное время при старте. В хостинг-панелях (cPanel, ISPmanager) часовой пояс настраивается через интерфейс — изменения применяются без перезапуска сервисов вручную.
Часовой пояс и cron
Часовой пояс критичен для cron-задач: если сервер в UTC, а задача должна выполняться в 3:00 по Москве (UTC+3), нужно указать 0:00 UTC. Изменение часового пояса: timedatectl set-timezone Europe/Moscow. Проверка: date или timedatectl. nginx: логи пишутся в системном часовом поясе — это важно при анализе access.log. PHP: date.timezone = Europe/Moscow в php.ini — иначе функции date() возвращают UTC. Apache: переменная TZ для часового пояса. ISPmanager и cPanel отображают часовой пояс в настройках сервера. VPS в Москве: часовой пояс Europe/Moscow (UTC+3, без летнего времени с 2014 года).