【问题标题】:php date() one hour ahead of server time (DST problem)php date() 比服务器时间提前一小时(夏令时问题)
【发布时间】:2011-05-03 15:10:02
【问题描述】:

我正在尝试排除故障并解决此问题: 我正在使用的服务器(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) 

【问题讨论】:

  • 同时检查夏令时设置。
  • 谢谢,PHP 确实在使用夏令时。我会更新问题。
  • (tipp) 使用 error_reporting(-1); 将显示所有可能的错误,即使在未来的 PHP 版本中添加了新的级别和常量。
  • @Gordon:谢谢,我知道。我喜欢明确说明错误报告级别。

标签: php date time dst


【解决方案1】:

几天前有a question 表明PHP 还没有听说阿根廷got rid of DST only this year 的事实。似乎这个决定还没有进入代码库。 (但没有得到证实,所以不是100%清楚是不是。)

也许可以尝试dumping your time zones 以同样的方式查看这是否也适用于您的 PHP 版本。

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

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

【讨论】:

  • 我似乎记得几年前发生过同样的事情......可能就是这样。谢谢!
  • 这在原始问题中特别明显,因为错误的时间在“ARST”中,但正确的时间在“ART”中。
  • @Adriano 好问题!一件事是向 bugs.php.net 提交一个错误,以便清理它 - 似乎还没有错误报告。至于怎么做,date_default_timezone_set() 是否接受纯偏移量?也许您可以暂时强制使用-0300(或者现在正确的,我很困惑:)。
  • 我也在 bugs.php.net 中提交了这个错误,感谢您的建议。我不得不说,这里填写了所有内容,以便轻松报告错误。
  • 您可以使用“pecl install timezonedb”更新时区数据库。
猜你喜欢
  • 2014-08-22
  • 2013-11-15
  • 2018-10-01
  • 2019-05-26
  • 2012-06-08
  • 2017-03-14
  • 2017-11-10
  • 2021-04-12
  • 2010-09-27
相关资源
最近更新 更多