获取给定unix时间戳的PHP时区偏移量

获取给定unix时间戳的PHP时区偏移量,php,timezone,timestamp,unix-timestamp,Php,Timezone,Timestamp,Unix Timestamp,我有一个Unix时间戳,它来自一个(不幸的是)位于某个时区的数据库,该时区的某个值为+3600或+7200,这取决于它是否是DST。这以前从来都不是一个问题,但我们的网站目前正在向更国际化的受众移动,由于Javascript与上述时间戳的交互,我需要转换时间戳,而不需要任何偏移 那么,在给定一个Unix时间戳的情况下,如何获取该时间戳时刻时区的偏移量呢?我正在浏览PHP文档,但是有太多的日期/时间函数,我有点不知所措 我使用的是PHP5.2.3,这会起作用吗 $tz = date("O", $t

我有一个Unix时间戳,它来自一个(不幸的是)位于某个时区的数据库,该时区的某个值为+3600或+7200,这取决于它是否是DST。这以前从来都不是一个问题,但我们的网站目前正在向更国际化的受众移动,由于Javascript与上述时间戳的交互,我需要转换时间戳,而不需要任何偏移

那么,在给定一个Unix时间戳的情况下,如何获取该时间戳时刻时区的偏移量呢?我正在浏览PHP文档,但是有太多的日期/时间函数,我有点不知所措


我使用的是PHP5.2.3,这会起作用吗

$tz = date("O", $time);
你也可以这样做:

从这里开始:


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

一件可能对您有用的事情是确定给定的时间戳是否发生在DST生效的时间段内,然后进行相应的调整。不过,这种方法可能会在边界附近失败(因为DST开始后的一小时内和结束前的一小时内,每个时间戳有两种含义)


将来,您最好将时间戳存储在UTC中,以避免这类问题。

如果您使用unix时间戳表示unix时间(从纪元开始的秒数),则偏移量始终为0。历元定义为UTC时间1970年1月1日00:00:00。请注意UTC,其偏移量为0


时区偏移和dst的应用由将unix时间戳转换为日期/时间结构的库处理。(我不懂php,但也就是说,在C中,localtime函数使用unix时间戳,应用环境或/etc/localtime文件中的时区信息,并输出秒、分钟、小时等结构)。

我觉得回答自己的问题很傻,但我刚刚找到了该函数。它似乎正是我想要的。谢谢大家

U可以使用以下方法:

$timezone_offset = date('O');
它将以小时为单位将差值返回格林威治时间(GMT)


我不认为只有UNIX时间戳才有可能做到这一点……因为它没有存储任何时区信息,只存储1970年1月1日起的秒数。@bobby:虽然它没有存储任何时区信息,但UNIX时间被定义为UTC。@kjetijor:但它或多或少不是UNIX时间戳,生成时是否本地化?@Bobby:只有在服务器设置出现严重错误的情况下才可以。当然,这只适用于未来,因为你不知道创建时的Unix时间戳。是的,我知道应该如何存储时间戳,但当我开始在这里工作时,有很多这样的现有数据。所以我只是按照流程去做…Unix时间是UTC,它有偏移量0,没有DST调整。无需调整unix时间戳。时间戳来自PHP
time()
函数。它获取unix时间并应用服务器的时区偏移量。@kjetijor-这是真的,但我认为通过“unix时间戳”,OP指的是一个数字,它表示自1970年1月1日00:00起的某个时区的秒数(从他的回答中可以看出是GMT加上夏令时调整)。