Warning: date(): It is not safe to rely on the system’s timezone settings — как исправить в PHP 5.3
Развернул новый сервер, на нём встал PHP 5.3.2 с по-новому оформленным php.ini. И сразу на сайтах полезли предупреждения:
Warning: getdate(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Helsinki' for 'EEST/3.0/DST' instead in ...

Такое же предупреждение выдают и date(), mktime(), strtotime(): в старом виде оно выглядит как Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. Причина одна: начиная с PHP 5.3 часовой пояс нужно указать явно. Исправляется за минуту — ниже три способа.
Почему появляется предупреждение
Если часовой пояс нигде не задан, PHP 5.3 пытается угадать его по системным настройкам сервера (в моём случае выбрал Europe/Helsinki) и при каждом вызове функции даты напоминает об этом предупреждением. Скрипты работают, но предупреждения портят страницы, а время может оказаться не тем, что нужно.
Способ 1: php.ini (лучший)
Открываем php.ini и находим раздел [Date]. Там есть закомментированная строка ;date.timezone = — убираем точку с запятой и вписываем свой пояс:
[Date] date.timezone = Europe/Kiev
Для Москвы — Europe/Moscow, остальные зоны есть в списке часовых поясов PHP.
Где лежит php.ini:
- FreeBSD —
/usr/local/etc/php.ini. Если файла нет, его делают из образцаphp.ini-productionиз того же каталога. - Debian и Ubuntu —
/etc/php5/apache2/php.iniдля веб-сервера и/etc/php5/cli/php.iniдля консоли. Пояс нужно прописать в оба.
Точно узнать, какой файл читает PHP, можно командой php --ini (для консоли) или в выводе phpinfo() — строка «Loaded Configuration File».
После правки перезапускаем веб-сервер:
# FreeBSD /usr/local/etc/rc.d/apache22 restart # Debian, Ubuntu /etc/init.d/apache2 restart
Проверка:
php -i | grep date.timezone
Способ 2: в самом скрипте
Если доступа к php.ini нет (обычный хостинг), пояс можно задать в начале скрипта, до первого вызова функций даты — например, в общем конфигурационном файле сайта:
<?php
date_default_timezone_set('Europe/Kiev');
Если «не помогло» — проверьте кавычки. При копировании со страниц прямые кавычки ' часто превращаются в «умные» ‘ ’, а с ними PHP строку не понимает. И строка должна выполняться раньше, чем код, который выдаёт предупреждение.
Способ 3: .htaccess или .user.ini
Если PHP работает как модуль Apache, пояс можно задать в файле .htaccess в корне сайта:
php_value date.timezone "Europe/Kiev"
Если же PHP запущен через CGI/FastCGI, эта строка вызовет ошибку 500. Тогда вместо неё создаём в корне сайта файл .user.ini:
date.timezone = Europe/Kiev
Дополнение (2026)
- В PHP 7 это предупреждение убрали: если пояс не задан, PHP молча использует UTC. Ошибки на экране нет, но время может отличаться от вашего на 2–3 часа, поэтому date.timezone всё равно стоит указать.
- Правильное название пояса для Украины теперь
Europe/Kyiv. СтароеEurope/Kievоставлено только для совместимости, и PHP не рекомендует его использовать.
Коротко
- Предупреждение «It is not safe to rely on the system’s timezone settings» значит, что в PHP не задан часовой пояс.
- Лучшее решение —
date.timezoneв разделе [Date] файла php.ini и перезапуск веб-сервера. - Без доступа к php.ini —
date_default_timezone_set()в скрипте,php_valueв .htaccess (модуль Apache) или.user.ini(CGI/FastCGI).
Что-то не помогло «date_default_timezone_set(‘Europe/Kiev’);» *SORRY*