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

时间:2012-11-07 20:08:59

标签: 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 DateTimeZone("Europe/Stockholm"););
var_dump($date1->getTimestamp()); //prints: 1351386000

如您所见,setTimezone()更改了getTimestamp()的结果。

是否期望setTimezone()影响getTimestamp()?

2 个答案:

答案 0 :(得分:1)

您关闭的金额为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正在改变的日期就不会发生。

答案 1 :(得分:0)

是的,unix时间戳是根据日期对象的当前时间或您从Epoch的当前机器时间。