我有一个Unix时间戳来自一个数据库(不幸的是)在某个时区有3600或7200的某个时区,具体取决于它是否为DST . 这在以前从来就不是问题,但是我们的网站目前正在转向更多的国际受众,并且由于Javascript与所述时间戳的交互,我需要转换时间戳而没有任何偏移 .
那么,如果只是一个Unix时间戳,我该如何在时间戳的那一刻得到时区的偏移?我正在浏览PHP文档,但是有很多日期/时间函数我有点迷失 .
我正在使用PHP 5.2.3
如果您通过unix时间戳表示unix时间(自Epoch以来的秒数),则偏移量始终为0. Epoch定义为1970年1月1日00:00:00 UTC . 请注意UTC,其偏移量为0 .
时区偏移和dst的应用由将unix时间戳转换为日期/时间结构的库处理 . (我不知道php,但是在C中,localtime函数采用unix时间戳,从环境或/ etc / localtime文件应用时区信息,并吐出一个秒,分钟,小时等结构) .
你可以用这个:
$timezone_offset = date('O');
它将以小时为单位返回格林威治时间(格林威治标准时间)的差异 .
[source]
我再次回答自己的问题感到愚蠢,但我刚刚找到了gmstrftime函数 . 它似乎完全符合我的要求 . 谢谢大家!
在一般情况下,你不能这样做 . Unix时间戳只是自Unix纪元以来的秒数,并且不包含任何时间戳信息 .
可能对您有用的一件事是确定在DST生效期间是否发生给定时间戳,然后进行相应调整 . 然而,这种方法在边界附近会失败(因为在DST开始之后和紧接着DST之前的一小时内每个时间戳有2个含义) .
将来,您可能最好将时间戳存储在UTC中,以避免出现这种问题 .
这会诀窍吗?
$tz = date("O", $time);
你也可以这样做:
从这里:
http://www.php.net/manual/en/function.date.php
5 回答
如果您通过unix时间戳表示unix时间(自Epoch以来的秒数),则偏移量始终为0. Epoch定义为1970年1月1日00:00:00 UTC . 请注意UTC,其偏移量为0 .
时区偏移和dst的应用由将unix时间戳转换为日期/时间结构的库处理 . (我不知道php,但是在C中,localtime函数采用unix时间戳,从环境或/ etc / localtime文件应用时区信息,并吐出一个秒,分钟,小时等结构) .
你可以用这个:
它将以小时为单位返回格林威治时间(格林威治标准时间)的差异 .
[source]
我再次回答自己的问题感到愚蠢,但我刚刚找到了gmstrftime函数 . 它似乎完全符合我的要求 . 谢谢大家!
在一般情况下,你不能这样做 . Unix时间戳只是自Unix纪元以来的秒数,并且不包含任何时间戳信息 .
可能对您有用的一件事是确定在DST生效期间是否发生给定时间戳,然后进行相应调整 . 然而,这种方法在边界附近会失败(因为在DST开始之后和紧接着DST之前的一小时内每个时间戳有2个含义) .
将来,您可能最好将时间戳存储在UTC中,以避免出现这种问题 .
这会诀窍吗?
你也可以这样做:
从这里:
http://www.php.net/manual/en/function.date.php