1

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

使用time()似乎不起作用,因为它是时区感知的,并且忽略了服务器上是否实际打开了 DST。例如,如果时区设置为“America/Los_Angeles”但未选中 DST(Windows 机器),如果今天的日期是 9 月 1 日,那么 Windows 时间可以是下午 1 点,但 PHPtime()将返回下午 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 小时差异。

4

2 回答 2

2

date("Z")以秒为单位为您提供与 GMT 的签名本地偏移量。然后您可以将其添加到日期的输出中。请参阅日期功能的手册页

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

于 2011-01-05T00:35:53.770 回答
2

我认为 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 问题) (他只是没有告诉所有人。)

于 2011-01-05T01:26:07.280 回答