date.timezone: часовой пояс в PHP
PHP не берёт часовой пояс из системы: если date.timezone не задан, он считает время по UTC. В Ubuntu эта строка в php.ini закомментирована. Впишите date.timezone = Europe/Moscow в оба файла php.ini — для сайта и для командной строки.
Содержание 8
Что сделать прямо сейчас
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
- Откройте файл настроек PHP для сайта:
sudo nano /etc/php/8.3/fpm/php.ini. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter. - Нажмите Ctrl+W, введите
date.timezone =и нажмите Enter — курсор встанет на строку с этой настройкой. Если в начале строки стоит точка с запятой, удалите её: такая строка не действует. - Впишите новое значение:
date.timezone = Europe/Moscow. Для другого пояса — его имя из списка ниже. - Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
- Перезапустите PHP-FPM:
sudo systemctl restart php8.3-fpm. Если команда ничего не ответила, PHP перезапущен. - Проверьте значение:
php-fpm8.3 -i | grep date.timezone.
Сделайте то же в файле для команды php в окне SSH и заданий cron: sudo nano /etc/php/8.3/cli/php.ini. Перезапуск для него не нужен. Проверьте:
ivan@myserver:~$ php -r 'echo date_default_timezone_get(), PHP_EOL;'
Europe/MoscowКоманды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.
Почему время в PHP не совпадает с сервером
PHP выбирает пояс по порядку:
- пояс, заданный в коде функцией
date_default_timezone_set(); - настройка date.timezone;
- если нет ни того, ни другого, — UTC.
Пояс системы, который показывает timedatectl, PHP не учитывает. Поэтому после смены пояса на сервере время в PHP остаётся прежним, пока не задан date.timezone.
Как называется ваш пояс
Пояс пишут как регион и город латиницей: Europe/Moscow, Europe/Kaliningrad, Europe/Samara. Полный список — в справке PHP: выберите часть света и найдите свой город или ближайший в том же поясе.
Invalid date.timezone value
Invalid date.timezone value 'Moscow', using 'UTC' insteadТакое предупреждение PHP выдаёт, если имени пояса нет в списке: например, написано Moscow без Europe/ или с опечаткой. PHP оставляет прежний пояс — тот, что указан в конце сообщения. Впишите имя точно как в списке и перезапустите PHP-FPM.
Пояс только для одного сайта
Только для одного сайта — строкой php_admin_value[date.timezone] = Europe/Moscow в пуле PHP-FPM или строкой date.timezone = Europe/Moscow в файле .user.ini: как это сделать. Можно и в коде сайта — функцией date_default_timezone_set('Europe/Moscow').
WordPress
WordPress при запуске сам ставит для PHP пояс UTC, а свой пояс берёт из настроек сайта. Поэтому date.timezone на время в WordPress не влияет: пояс выбирают в разделе «Настройки → Общие».
Источники
- Справка PHP: date_default_timezone_get() — если пояс не задан ни функцией date_default_timezone_set(), ни в date.timezone, PHP берёт UTC.
- Справка PHP: date.timezone — часовой пояс по умолчанию для функций даты и времени; с PHP 8.2 на неверное значение выдаётся предупреждение.
- Исходный код PHP 8.3.6: php_date.c — значение date.timezone по умолчанию — UTC; текст Invalid date.timezone value.
- Справка PHP: список настроек — значения по умолчанию и где можно менять каждую настройку: INI_ALL, INI_PERDIR или INI_SYSTEM.
- Справка PHP: пояса Европы — Europe/Moscow, Europe/Kaliningrad, Europe/Samara и другие.
- Исходный код WordPress 7.1.3: wp-settings.php — при запуске WordPress ставит для PHP пояс UTC.
Сверено 14 октября 2026 года.
Что почитать дальше
- Как изменить часовой пояс на серверепояс системы и синхронизация времени.
- Настройки PHPглавные настройки и где их задают.
- Где находится php.iniфайлы для сайта и для командной строки.