php date () на час раньше времени сервера (проблема DST) - PullRequest
4 голосов
/ 01 ноября 2010

Я пытаюсь устранить неполадки и решить эту проблему: сервер, на котором я работаю (php 5.2.9 в Linux), имеет правильное местное время (Америка / Buenos_Aires):

user@server [/home/site/public_html]$ date
Mon Nov  1 17:11:14 ART 2010

php.ini установлен с date.timezone = "America/Buenos_Aires" Я также попытался установить часовой пояс непосредственно в скрипте с помощью

<?php
ini_set('display_errors', true);
error_reporting(E_ALL|E_STRICT|E_NOTICE);

//date_default_timezone_set("America/Buenos_Aires"); 
//echo  date_default_timezone_get(), "<br>";
echo "ini: ", ini_get('date.timezone'), "<br>";

$now = date("H:i:s T I");
$nowdate = date("Y-m-d");
echo $nowdate." ".$now;
?>

, но безрезультатно, результат будет

ini: America/Buenos_Aires
2010-11-01 18:11:14 ARST 1

, когда это должнопрочитайте 17:11 (это на один час вперед).Все, что я нашел здесь и в Интернете, указывало на

  • date_default_timezone_set (который я пробовал)
  • установка date.timezone в php.ini (который установлен)
  • путает серверное время с клиентским временем (а я нет).

Есть идеи?

РЕДАКТИРОВАТЬ: Как и предполагалось, я проверил и какВы можете видеть в коде, PHP думает, что он должен применять DST, и Аргентина решила не применять его в этом году.Любой вариант кроме ожидания патча?

РЕДАКТИРОВАТЬ 2: Я попытался сбросить переход часовых поясов, как предложено.Я получил следующее:

The timezone America/Buenos_Aires switches to standard time on 20 Mar 2011 @ 02:00.
The new GMT offset will be: -10800 (ART) 

1 Ответ

10 голосов
/ 01 ноября 2010

Несколько дней назад был вопрос , который предполагал, что PHP еще не узнал о том, что Аргентина избавилась от летнего времени только в этом году . Похоже, что это решение еще не вошло в кодовую базу. (Но это не было подтверждено, поэтому не ясно на 100%, было ли это так.)

Возможно, попробуйте сбросить ваши часовые пояса таким же образом, чтобы увидеть, относится ли это и к вашей версии PHP.

Обновление: Кажется, это действительно проблема. Лучшее решение, которое я могу придумать, - это использовать смещение во временной зоне, например, Etc/GMT-3

Кто-то должен сообщить об ошибке в bugs.php.net, похоже, для этого не существует.

...