用PHP获取Windows时间

时间:2011-01-04 23:24:01

标签: php time dst

如何在PHP脚本中获取当前的Windows时间?

使用time()似乎不起作用,因为它是时区感知的,并忽略服务器上是否实际打开了DST。例如,如果时区设置为“America / Los_Angeles”但未取消选中DST(Windows机器),如果今天的日期是9月1日,则Windows时间可以是下午1点,但PHP time()将返回下午2点

如何获取服务器的Windows时间? (使用PHP 5.2.14)。

重现问题

  • 将时区设置为“America / Los_Angeles”并取消选中“夏令时”复选框。将日期设置为2010年9月1日下午16:00:00。
  • 使用以下内容创建一个简单的PHP脚本,然后运行它

echo date_default_timezone_get(), date("H:i:s", time());

输出为America / Los_Angeles 17:00:00。请注意由于夏令时造成的1小时差异。

2 个答案:

答案 0 :(得分:2)

date("Z")以秒为单位为您提供gmt的签名本地偏移量。然后,您可以将其添加到日期输出中。请参阅date function

的联机帮助页

如果你不相信这些设置,你也可以使用shell_exec执行date命令并解析输出

答案 1 :(得分:2)

我认为PHP不考虑Windows DST设置。时区根据定义的标准进行解释。也是根据上次出现的结果:Daylight savings time not correct even after setting timezone

但请参阅http://php.net/manual/en/function.date-default-timezone-set.php
有一些示例代码使用WShell在Win注册表中查询实际值,包括DST标志。然后使用timezone_abbreviations_list(),你可以找到一个具有正确时区名称和DST标志的别名,设置它。

另外@Pekka在这里有另一个手动解决方法:php date() one hour ahead of server time (DST problem)(他只是不告诉所有人。)