4

我正在尝试排除故障并解决此问题:我正在使用的服务器(Linux 上的 php 5.2.9)具有正确的本地时间(美国/布宜诺斯艾利斯):

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 (我试过)
  • 在 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) 
4

1 回答 1

10

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

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

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

有人应该向 bugs.php.net 提交一个错误,似乎没有这个问题。

于 2010-11-01T20:24:41.483 回答