PHP gmdate返回一小时后的时间


PHP gmdate returns time one hour behind

我有这个代码

if (date_default_timezone_get()) {
    echo 'date_default_timezone_set: ' . date_default_timezone_get() . '<br />';
}
echo 'time: ' .date('Y-m-d H:i:s'). '<br />';

if (ini_get('date.timezone')) {
    echo 'date.timezone: ' . ini_get('date.timezone'). '<br />';
}
echo 'time: ' .gmdate("Y-m-d'TH:i:s.''0''0''0''Z", time()). '<br />';

这是我得到的输出

date_default_timezone_set: Europe/London
time: 2016-03-29 21:26:41
date.timezone: Europe/London
time: 2016-03-29T20:26:41.000Z

所以我的php.ini设置为伦敦,而GMT仍然落后了一个小时。无论我做什么,gmdate总是同一时间,这是错误的,因为根据世界时钟,GMT现在是19:26。

我在本地主机上运行。我的本地时间&运行代码时的机器时间是22:26。我尝试在php.ini中更改为这些时区:

  • 亚洲/科威特-GMT+4
  • 亚洲/耶路撒冷-GMT+3
  • 欧洲/柏林-GMT+1
  • 欧洲/伦敦-0

没有任何帮助。有什么想法吗?

更新&解决方案

正如评论中所说,这个问题与夏令时有关。我电脑上的时间设置为我所在国家的正确当地时间。然而,我认为他们改变了时间的日期,大约一周前就改变了,检查我的车窗控制面板,它只预计在4月1日。

唯一对我有用的就是把我电脑上的时区改成另一个时区。这不是一个好的解决方案,下周我可能需要再次更改,但目前有效。。

要更改窗口上的时区,我是这样做的:1) 通过单击"开始"按钮、"控制面板"、"时钟"、"语言"answers"区域",然后单击"日期和时间",打开日期和时间。2) 更改时区->更改时区。3) 调整时间。

看起来是正确的:)

gmdate不考虑夏令时

时间推迟了一个小时似乎证实了这一点。

date函数似乎在自我调整-请尝试使用它。

结账http://php.net/manual/en/function.gmdate.php-尽管我怀疑你已经有了。

我猜是由于时间变化?您可以手动更改时间,也可以使用类似以下的API:http://www.timeapi.org/.

希望这能有所帮助!

jacmoe说的是正确的。格林尼治标准时间站点表现出与gmdate()date()函数相同的行为。

要澄清的是,gmdate()不能直接考虑夏令时,这是一个非常无用的函数。最干净的方法是使用正常的日期功能,提前设置时区,例如:

date_default_timezone_set('Europe/London');
echo time();