Php 为什么getTimestamp()受setTimezone()影响

Php 为什么getTimestamp()受setTimezone()影响,php,datetime,unix-timestamp,Php,Datetime,Unix Timestamp,我已经为PHP的DateTime类挣扎了很长一段时间。我的理解是,无论时区如何,UNIX timstamp始终以UTC为单位 这就是为什么我对这个代码示例感到非常困惑的原因 $date1 = new DateTime("@1351382400"); // Sun Oct 28 2012 02:00:00 GMT+2 (DST) var_dump($date1->getTimestamp()); //prints: 1351382400 $date1->setTimezone(new

我已经为PHP的DateTime类挣扎了很长一段时间。我的理解是,无论时区如何,UNIX timstamp始终以UTC为单位

这就是为什么我对这个代码示例感到非常困惑的原因

$date1 = new DateTime("@1351382400"); // Sun Oct 28 2012 02:00:00 GMT+2 (DST)
var_dump($date1->getTimestamp()); //prints: 1351382400
$date1->setTimezone(new DateTimeZone("Europe/Stockholm"););
var_dump($date1->getTimestamp()); //prints: 1351386000
正如您所看到的,setTimezone()更改了getTimestamp()的结果


setTimezone()是否会影响getTimestamp()?

是的,unix时间戳是根据日期对象的当前时间或从历元开始的当前机器时间。

是的,unix时间戳是根据日期对象的当前时间或从历元开始的当前机器时间。

关闭的时间为3600秒或1小时

我想你看到的是因为你选择的日期是斯德哥尔摩夏时制的结束。如果使用不同的日期,则不会产生这种效果:

$now = time();
echo "            now: $now\n";

$date1 = new DateTime("@{$now}");
echo "     date1 here: {$date1->getTimestamp()}\n";
$date1->setTimezone(new DateTimeZone("Europe/Stockholm"));
echo "date1 Stockholm: {$date1->getTimestamp()}\n";
输出:

            now: 1352321491
     date1 here: 1352321491
date1 Stockholm: 1352321491

我不确定这是否是一个错误,但如果您不选择DST更改的日期,则不会发生错误。

您关闭的时间为3600秒或1小时

我想你看到的是因为你选择的日期是斯德哥尔摩夏时制的结束。如果使用不同的日期,则不会产生这种效果:

$now = time();
echo "            now: $now\n";

$date1 = new DateTime("@{$now}");
echo "     date1 here: {$date1->getTimestamp()}\n";
$date1->setTimezone(new DateTimeZone("Europe/Stockholm"));
echo "date1 Stockholm: {$date1->getTimestamp()}\n";
输出:

            now: 1352321491
     date1 here: 1352321491
date1 Stockholm: 1352321491

我不确定这是否是一个错误,但如果不选择DST更改的日期,则不会发生错误。

Ok,在这种情况下,setTimezone()不应影响getTimestamp()返回的unix时间戳?那么这是一个bug吗?好的,在这种情况下,setTimezone()不应该影响getTimestamp()返回的unix时间戳?那么,这是一个错误吗?向夏令时过渡打招呼。当然,但这是预期的吗?显然不是你,这才是重要的。向夏令时过渡打招呼。当然,但这是预期的吗?显然不是你,这才是重要的。这是真的,但似乎有点不一致。我一年四季都在处理时间序列——每年两天——这对我来说是个问题。嗯,意识到if使解决问题成为可能。根据啊,这似乎是一个已知的问题,那么它就是一个bug。谢谢你的发现!这是真的,但似乎有点不一致。我一年四季都在处理时间序列——每年两天——这对我来说是个问题。嗯,意识到if使解决问题成为可能。根据啊,这似乎是一个已知的问题,那么它就是一个bug。谢谢你的发现!