在 PHP 中获取 Windows 时间
如何在 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 小时差异。
How can I get the current Windows time in a PHP script?
Using time()
doesn't seem to work because it is timezone aware and ignores whether DST is actually turned on or not on the server. E.g., if the timezone is set to "America/Los_Angeles" but DST is unchecked (Windows machine), if today's date is say Sept 1, then the windows time can be 1 PM but the PHP time()
will return 2 PM.
How can I get the server's Windows time? (using PHP 5.2.14).
Reproducing the problem
- Set timezone to "America/Los_Angeles" and uncheck the "Daylight Savings Time" checkbox. Set the date to Sept 1, 2010, at 16:00:00 PM.
- Create a simple PHP script with the following, then run it
echo date_default_timezone_get(), date("H:i:s", time());
The output is America/Los_Angeles 17:00:00. Notice the 1 hour difference due to DST.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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( )比服务器时间提前一小时(夏令时问题)(他只是不告诉所有人。)
I think PHP doesn't take the Windows DST setting into account. Timezones are interpreted according to the defined standard. Also according to last time this came up: Daylight savings time not correct even after setting timezone
But see http://php.net/manual/en/function.date-default-timezone-set.php
There is some example code using WShell to query the Win registry for the actual values, including the DST flag. Then using
timezone_abbreviations_list()
you can find an alias with the correct timezone name and DST flag, set this.Also @Pekka had another manual workaround here: php date() one hour ahead of server time (DST problem) (he just doesn't tell everyone.)
date("Z")
为您提供距 gmt 的有符号本地偏移量(以秒为单位)。然后您可以将其添加到日期的输出中。 请参阅 日期函数 的联机帮助页如果您不信任该设置, 还使用 shell_exec 执行日期命令并解析输出
date("Z")
gives you the signed local offset from gmt in seconds. you can then add that to the output of date. please see the manpage of the date functionif you dont trust that settings you can also execute the date command using shell_exec and parse the output