3

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

那么,在给定一个 Unix 时间戳的情况下,我如何在该时间戳的时刻获取时区的偏移量?我正在查看 PHP 文档,但是有这么多日期/时间函数,我有点迷路了。

我正在使用 PHP 5.2.3

4

5 回答 5

4

我再次回答自己的问题感到很傻,但我刚刚找到了这个gmstrftime功能。它似乎正是我想要的。不过还是谢谢大家!

于 2009-10-08T09:45:23.533 回答
2

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

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

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

于 2009-10-08T09:36:24.590 回答
2

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

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

于 2009-10-08T09:44:33.140 回答
1

你可以使用这个:

$timezone_offset = date('O');

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

[资源]

于 2011-03-03T13:22:54.007 回答
0

这会奏效吗?

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

你也可以这样做:

从这里:

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

于 2009-10-08T09:36:11.247 回答