根据时区移动unix时间戳

时间:2014-02-03 09:08:14

标签: php datetime

我知道这个问题已被多次回答。我找到了解决这个问题的解决方案,就像这样。我在服务器上以UTC格式存储每个帖子的所有时间戳。现在我需要显示给定时区的时间戳。我这样做:

$ tz:请求的时区 $ ts:db上的timstamp $ newts:新时间戳

$datetime = date('m/d/Y g:i a', $ts);
$dt = new DateTime($datetime, new DateTimeZone('UTC'));
date_default_timezone_set(trim($tz));
$newts = $dt->format('U');      
date_default_timezone_set('UTC');

然而,由此产生的时间戳比应该的时间高60秒。 我做错了什么?

2 个答案:

答案 0 :(得分:2)

您已经关闭,您需要做的就是根据时间戳/服务器时区创建原始DateTime对象,然后设置新时区并打印结果,如下所示:

$datetime = new DateTime('@'.$ts, new DateTimeZone('UTC'));
$datetime->setTimezone(new DateTimeZone($tz));

print $datetime->format('m/d/Y g:i a');

无论时区如何,unix时间戳都是相同的(它是TZ不可知的)。在为不同时区显示偏移时会发生偏移。这是你可以通过打印每个不同时区的unix时间戳来测试它(它们将是相同的)。

答案 1 :(得分:0)

U格式为您提供“自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数”。这个数字并不取决于你到底在哪里。所以,即使你的地方可能是14:59,而我的地方也是10点24分,自1970年1月1日00:00:00 GMT以来我们两个地方的秒数是相同的。 “给定时区的时间戳”没有意义。