我在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()?
答案 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的当前机器时间。