Настройки PHP в php.ini
:
date.timezone = Asia/Jerusalem.
Мой сервер Linux (Ubuntu) показывает правильное время: Wed Oct 1 15:35:39 IDT 2014
Но когда я echo date('Y-m-d H:i:s');
я получил 2014-10-01 14:35:39
(На час раньше).
Я также пытался date_default_timezone_set('Asia/Jerusalem');
но результаты одинаковы
Почему результат выключен?
За последние несколько лет в Израиле произошли некоторые изменения в переходе на летнее время. Предполагается, что в этом году DST будет действовать до 26 октября. Последний раз, когда дата окончания летнего времени упала до 1 октября, было 23 сентября 2012 года. Ссылка здесь.
Когда Израиль объявил об изменениях на 2013 год вперед, они были выпущены в стандарте База данных часовых поясов IANA в версии 2013г. я вообще-то ответил на аналогичный вопрос тогда о том, как Java обрабатывает это изменение.
Для PHP база данных IANA реализуется через пакет timezonedb PECL. Вы можете установить этот пакет вручную для обновления до последней версии данных часового пояса.
PHP также поставляется с внутренней копией timezonedb, которая должна быть самой последней версией, доступной на момент выпуска версии PHP. Поэтому простое обновление PHP до последней версии также должно решить проблему.
Если вы хотите узнать, какая версия timezonedb у вас есть (встроенная или обновленная), вы можете позвонить timezone_version_get()
, как задокументировано здесь. Это должно быть как минимум 2013.4, чтобы иметь это конкретное изменение. Текущий выпуск 2014.7.
Вы решаете это, явно устанавливая часовой пояс в своих PHP-скриптах. Вы можете сделать это с date_default_timezone_set ():
date_default_timezone_set('Asia/Jerusalem');
Вот список поддерживаемых PHP часовых поясов.
Вы также можете попробовать вызвать тестовый скрипт date_default_timezone_get()
чтобы увидеть, что на самом деле установлено, чтобы убедиться, что это на самом деле проблема.
Установите и проверьте свой часовой пояс в php.
<?php
date_default_timezone_set('America/Los_Angeles'); // here set the time zone
$script_tz = date_default_timezone_get();
if (strcmp($script_tz, ini_get('date.timezone'))){
echo 'Script timezone differs from ini-set timezone.';
} else {
echo 'Script timezone and ini-set timezone match.';
}
?>
В часовом поясе Азии / Иерусалима действует летнее время; может быть, php не справляется с этим. Вызов функции date('I')
вернусь 1
если ваш PHP в настоящее время работает DST, 0
иначе.