在给定unix时间戳的情况下,在PHP中获取时区偏移量

时间:2009-10-08 09:20:13

标签: php timezone timestamp unix-timestamp

我有一个来自数据库的Unix时间戳(不幸的是)在时区中有一些+3600或+7200,具体取决于它是否为DST。这在以前从来就不是问题,但我们的网站目前正在转向更多的国际受众,并且由于Javascript与所述时间戳的交互,我需要转换时间戳而没有任何偏移。

那么,如果只是一个Unix时间戳,我该如何在时间戳的那一刻得到时区的偏移?我正在浏览PHP文档,但是有很多日期/时间函数我有点迷失。

我正在使用PHP 5.2.3

5 个答案:

答案 0 :(得分:4)

我再次回答自己的问题感到愚蠢,但我刚刚找到了gmstrftime功能。它似乎完全符合我的要求。谢谢大家!

答案 1 :(得分:2)

在一般情况下,你不能这样做。 Unix时间戳只是自Unix纪元以来的秒数,并且不包含任何时间戳信息。

可能对您有用的一件事是确定在DST生效期间是否发生给定时间戳,然后相应地进行调整。然而,这种方法在边界附近会失败(因为在DST开始之后和紧接着DST之前的一小时内每个时间戳有2个含义)。

将来,您可能最好以UTC格式存储时间戳,以避免出现这种问题。

答案 2 :(得分:2)

如果您通过unix时间戳表示unix时间(自Epoch以来的秒数),则偏移量始终为0. Epoch定义为1970年1月1日00:00:00 UTC。请注意UTC,其偏移量为0.

时区偏移和dst的应用由将unix时间戳转换为日期/时间结构的库处理。 (我不知道php,但是在C中,localtime函数采用unix时间戳,从环境或/ etc / localtime文件应用时区信息,并吐出一个秒,分钟,小时等结构)。

答案 3 :(得分:1)

你可以用这个:

$timezone_offset = date('O');

它将以小时为单位返回格林威治时间(GMT)的差异。

[source]

答案 4 :(得分:0)

这可以解决这个问题吗?

$tz = date("O", $time);

你也可以这样做:

从这里开始:

http://www.php.net/manual/en/function.date.php