Перейти к содержимому

Настройка временной зоны в PHP

По умолчанию время в PHP устанавливается в UTC (не GMT). Если не учитывать этот факт время выводимое функцией date(“Y-m-d H:i:s”) может отличаться от того, которое вы ожидаете увидеть.
Чтобы настроить временную зону необходимо отредактировать директиву date.timezone в конфигурационном файле php.ini, а если это не возможно воспользоваться функцией date_default_timezone_set()

Для начала найдем сам конфигурационный файл php.ini

admin@cacti:~$ php -i | grep "php.ini"
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
admin@cacti:~$

Ту же самую информацию можно получить с помощью простого скрипта:

<?php phpinfo(); ?>

Открываем конфигурационный файл PHP с помощью текстового редактора (я воспользуюсь nano):

admin@cacti:~$ nano /etc/php5/cli/php.ini

Находим директиву date.timezone если она закомментирована (перед ней стоит символ “;”) раскомментируем её (убираем символ “;”) и вписываем имя желаемой временной зоны. Для Москвы это будет выглядеть так:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Moscow

Для Риги вот так:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Riga

Получить полный список доступных таймзон можно прочитав справку на официальном сайте: http://php.net/date.timezone

Или выполнив команду в консоли:

admin@cacti:~$ php -r "print_r( DateTimeZone::listIdentifiers( ) );"

Или выполнив простой скрипт:
<?php print_r( DateTimeZone::listIdentifiers( ) ); ?>

Если вы арендуете виртуальный сервер, то, скорее всего, у вас есть доступ в панель управления (ISPmanager, cPanel и т.д.) которая позволит вам изменить ряд параметров в php.ini прямо из WEB интерфейса.

Если у вас нет возможности отредактировать конфигурационный файл php.ini вы можете изменить временную зону во время выполнения скрипта с помощью функции date_default_timezone_set()

<?php
date_default_timezone_set('America/Los_Angeles');
$script_tz = date_default_timezone_get();
if (strcmp($script_tz, ini_get('date.timezone'))){
echo 'Временная зона скрипта отличается от заданной в INI-файле.';
} else {
echo 'Временные зоны скрипта и настройки INI-файла совпадают.';
}
?>

Подробности можно прочитать в руководстве на официальном сайте: http://php.net/date_default_timezone_set

PS
Напоминаю, что получить справку по любой функции PHP можно просто дописав её после “/”, например http://php.net/print_r или http://php.net/str_replace

Добавить комментарий