Ошибка "It is not safe to rely on the system's timezone settings" в PHP: как исправить?
Что такое timezone и почему возникает ошибка?
Часовой пояс (timezone) — это регион с одинаковым стандартным временем. PHP требует явно указать часовой пояс, потому что от него зависит корректность всех операций с датами: date(), strtotime(), DateTime и других. Без настройки PHP не знает, в каком времени вы работаете, и выдаёт предупреждение.
Есть два способа исправить ошибку. Рекомендую использовать оба, но основной — первый.
Способ 1: Установка через функцию date_default_timezone_set() (в коде)
Самый простой и надёжный метод — добавить одну строку в начало вашего скрипта (после <?php):
<?php
date_default_timezone_set('Europe/Moscow');
echo date("Y-m-d H:i:s");
?>
Для других городов России используйте:
- Москва, Санкт-Петербург —
Europe/Moscow - Калининград —
Europe/Kaliningrad - Самара —
Europe/Samara - Екатеринбург —
Asia/Yekaterinburg - Новосибирск, Омск —
Asia/Novosibirsk - Красноярск —
Asia/Krasnoyarsk - Иркутск —
Asia/Irkutsk - Владивосток, Хабаровск —
Asia/Vladivostok - Камчатка —
Asia/Kamchatka
Преимущество этого метода — настройка действует только для текущего скрипта и не влияет на другие проекты на сервере.
Способ 2: Глобальная настройка в php.ini (для всего сервера)
Если вы хотите задать часовой пояс для всех скриптов сразу, отредактируйте файл php.ini. В OpenServer он находится в папке userdata/config/ (для каждой версии PHP свой). Найдите строку:
;date.timezone =
Раскомментируйте её (уберите точку с запятой) и укажите значение:
date.timezone = Europe/Moscow
После этого перезапустите веб-сервер (в OpenServer — кнопка "Перезапустить").
Как проверить, что всё работает?
Напишите простой тест:
<?php
echo date_default_timezone_get(); // выведет "Europe/Moscow"
echo "<br>";
echo date("Y-m-d H:i:s");
?>
Если видите корректное московское время — всё настроено правильно.
Важное замечание
Если вы используете PHP-фреймворки (Laravel, Symfony, WordPress), у них обычно есть свои настройки часового пояса в конфигурационных файлах. Например, в Laravel это config/app.php → параметр 'timezone'. Но базовая настройка через php.ini или date_default_timezone_set() всё равно требуется, чтобы избежать предупреждения.
Альтернативный подход: использование класса DateTime
Вместо функции date() рекомендую сразу привыкать к объектно-ориентированному подходу с классом DateTime. Он более гибкий и позволяет явно указывать часовой пояс при создании объекта, что решает проблему без глобальных настроек:
<?php
$date = new DateTime('now', new DateTimeZone('Europe/Moscow'));
echo $date->format('Y-m-d H:i:s');
?>
Если вам нужно получить текущее время в UTC:
<?php
$utcDate = new DateTime('now', new DateTimeZone('UTC'));
echo $utcDate->format('Y-m-d H:i:s');
?>
Этот метод особенно полезен, когда в одном скрипте нужно работать с разными часовыми поясами — например, показывать время для пользователей из разных регионов. Вы просто создаёте отдельные объекты DateTime с нужными DateTimeZone.
Кстати, полный список поддерживаемых часовых поясов можно получить командой:
<?php
print_r(DateTimeZone::listIdentifiers());
?>
Это выведет массив из сотен доступных идентификаторов, включая все регионы России.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги