【问题标题】:UTC to local time adjustment woes with PHP [duplicate]UTC与PHP的本地时间调整问题[重复]
【发布时间】:2015-01-19 01:33:45
【问题描述】:

有人可以解释为什么以下不起作用吗?

我有一个在共享主机帐户上运行的 PHP 脚本。该脚本应该输出我的当地时间(对于我所在的时区,即GMT-8:00,或PST。)

我正在阅读time() PHP 方法的文档,该方法应该以 UTC(或 GMT)返回 Unix 时间戳。好的,很好。所以我需要减去 8 小时才能得到我的当地时间,对吧?

所以我正在这样做:

echo(date("n/j/Y, g:i:s A", time() - 28800));    //8hrs = 28800 seconds

但我得到的时间晚了 5 小时!

这样的单行语句有什么问题?

PS。对不起,如果我问的是显而易见的。我来自.NET 的世界。我是 PHP 新手。

【问题讨论】:

  • date_default_timezone_set 可能更有用且更易于使用
  • @scrowler:我不确定是否要更改任何全局设置。我正在使用可能依赖它的其他库。
  • 我无法想象什么代码应该真正关心他们所在服务器的时区。
  • @Ja͢ck:我正在开发其网站的实体店的当地时间,我需要它。

标签: php time gmt


【解决方案1】:

PHP 的 time() 函数将始终返回自纪元以来的秒数。导致意外行为的罪魁祸首实际上是 date() 函数。

PHP 的 date() 函数会自动将日期转换为 PHP 的当前默认时区,它必须是 GMT - 3。这就是为什么减去 8 小时会落后 5 小时。

您可能想要签入 gmdate(),而不是使用 date()。比如:

echo(gmdate("n/j/Y, g:i:s A", time() - 28800));

可能是你需要的。

【讨论】:

  • 让我补充一点,使用DateTime 对象可以更轻松地操作日期和时区。另请参阅此very good comment on gmmktime() on php.net 以了解为什么偏移时间戳不如实际处理时区理想。 :)
  • @EricPing:谢谢。还发现以下工作:date("n/j/Y, g:i:s A", time() + 28800 - date("Z");。哇。难怪人们“喜欢” PHP :)
猜你喜欢
  • 2014-01-12
  • 2011-10-11
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
相关资源
最近更新 更多