php date()提前一小时服务器时间(DST问题)

Adr*_*zza 4 php time date dst

我正在尝试排除故障并解决这个问题:我正在处理的服务器(Linux上的PHP 5.2.9),具有正确的本地时间(America/Buenos_Aires):

user@server [/home/site/public_html]$ date
Mon Nov  1 17:11:14 ART 2010
Run Code Online (Sandbox Code Playgroud)

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;
?>
Run Code Online (Sandbox Code Playgroud)

但无济于事,结果是

ini: America/Buenos_Aires
2010-11-01 18:11:14 ARST 1
Run Code Online (Sandbox Code Playgroud)

什么时候应该读17:11(它始终提前一小时).我在这里和网上发现的所有内容都指向了

  • date_default_timezone_set(我试过)
  • 在php.ini中设置date.timezone(已设置)
  • 服务器时间与客户端时间混淆(我不是).

有任何想法吗?

编辑: 正如所建议的那样,我检查了,正如你在代码中看到的那样,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) 
Run Code Online (Sandbox Code Playgroud)

Pek*_*ica 10

几天前有一个问题表明PHP还没有得到阿根廷今年才摆脱DST的事实.似乎这个决定还没有进入代码库.(但是没有确认,所以不是100%清楚这是不是.)

也许尝试以相同的方式转储您的时区,看看是否也适用于您的PHP版本.

更新:这确实是问题所在.我能想到的最好的解决方案是在时区中使用偏移,例如Etc/GMT-3

有人应该使用bugs.php.net提交一个bug,似乎没有这个.

  • 您可以使用"pecl install timezonedb"更新时区数据库. (2认同)