我有一个来自数据库的 Unix 时间戳,该数据库(不幸的是)位于某个时区,时区为 +3600 或 +7200,具体取决于它是否为 DST。这在以前从来都不是问题,但是我们的网站目前正在向更多的国际受众转移,并且由于 Javascript 与所述时间戳的交互,我需要在没有任何偏移的情况下转换时间戳。
那么,在给定一个 Unix 时间戳的情况下,我如何在该时间戳的时刻获取时区的偏移量?我正在查看 PHP 文档,但是有这么多日期/时间函数,我有点迷路了。
我正在使用 PHP 5.2.3
我有一个来自数据库的 Unix 时间戳,该数据库(不幸的是)位于某个时区,时区为 +3600 或 +7200,具体取决于它是否为 DST。这在以前从来都不是问题,但是我们的网站目前正在向更多的国际受众转移,并且由于 Javascript 与所述时间戳的交互,我需要在没有任何偏移的情况下转换时间戳。
那么,在给定一个 Unix 时间戳的情况下,我如何在该时间戳的时刻获取时区的偏移量?我正在查看 PHP 文档,但是有这么多日期/时间函数,我有点迷路了。
我正在使用 PHP 5.2.3
我再次回答自己的问题感到很傻,但我刚刚找到了这个gmstrftime
功能。它似乎正是我想要的。不过还是谢谢大家!
在一般情况下你不能这样做。Unix 时间戳只是自 Unix 纪元以来的秒数,不包含任何时间戳信息。
可能对您有用的一件事是确定给定时间戳是否在 DST 生效期间出现,然后进行相应调整。但是,这种方法会在边界附近失败(因为在 DST 开始后和结束前的一小时内,每个时间戳都有 2 个含义)。
将来,您最好将时间戳存储在 UTC 中,以避免出现此类问题。
如果您使用 unix 时间戳表示 unix 时间(自纪元以来的秒数),则偏移量始终为 0。纪元定义为 00:00:00 UTC,1970 年 1 月 1 日。注意 UTC,其偏移量为 0。
时区偏移和 dst 的应用由将 unix 时间戳转换为日期/时间结构的库处理。(我不知道 php,但即在 C 中,localtime 函数采用 unix 时间戳,从环境或 /etc/localtime 文件应用时区信息,并输出秒、分钟、小时等结构)。