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小时差异。
-
time()返回时区中立的UNIX时间戳。你是如何决定一小时的?
-
date_default_timezone_get()说什么?你能展示一些代码吗?你是如何确定time()关闭的?
-
date("r")应该已经根据系统设置和时区给你当地时间,而gmdate("r")是GMT版本。否则可能是php.ini问题。
-
@deceze,@ Pekka,@ mario:看我的编辑。
-
@JRL我认为问题是PHP根本不听你的本地DST设置。它使用时区信息中嵌入的官方DST信息,其中说明是否有DST以及在什么时间段内。不知道该怎么办
-
@Pekka:确切地说,这就是我的结论。我需要的是系统时间。也许使用像系统(时间)或类似的系统调用?这可以可靠地使用吗?这就是我希望找到的东西。
-
系统调用以获取时间将是丑陋的。我认为@ Joe的答案应该有效
-
time是否会返回不同的时间戳,具体取决于DST是打开还是关闭?它不应该是AFAIK。此外,date('...', time())是多余的,它与date('...')相同。这导致的是time可能不是罪魁祸首,但通过date转换为人类可读的时间格式。我不知道这是否只是挑剔或者是否给你一些重要信息。 :)
我认为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命令并解析输出
-
date("Z")给出了时区偏移量,这不是我需要的,因为它没有考虑服务器上是否启用了DST。
-
至于解析shell_exec的输出,问题是语言环境可能会有所不同,因此它的匹配器可能很复杂。