1

我一直在努力使用 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()?

4

2 回答 2

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 更改的日期,它就不会发生。

于 2012-11-07T20:55:17.013 回答
0

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

于 2012-11-07T20:13:11.143 回答