用PHP获取Windows时间

Getting Windows Time in PHP

如何在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。 请注意由于DST导致的1小时差异。


我认为PHP不考虑Windows DST设置。 时区根据定义的标准进行解释。 此外,根据上次出现:即使在设置时区后,夏令时也不正确

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

另外@Pekka在这里有另一个手动解决方法:php date()比服务器时间提前一小时(DST问题)(他只是不告诉所有人。)


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

如果您不相信该设置,您还可以使用shell_exec执行date命令并解析输出