По умолчанию время в 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