首页 文章

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

提问于
浏览
3

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

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

我正在使用PHP 5.2.3

5 回答

  • 4

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

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

  • 1

    你可以用这个:

    $timezone_offset = date('O');
    

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

    [source]

  • 0

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

  • 2

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

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

    将来,您可能最好将时间戳存储在UTC中,以避免出现这种问题 .

  • 2

    这会诀窍吗?

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

    你也可以这样做:

    从这里:

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

相关问题