我有一个时间戳,我试图转换为另一个时区。这样做时我需要考虑DST。
我正在使用的代码如下:
$date = new DateTime("@".$timestamp);
echo $date->format('Y-m-d H:i:s')."\r\n";
$date->setTimezone(new DateTimeZone('Europe/Paris'));
echo $date->format('Y-m-d H:i:s')."\r\n"; // Pacific time
$date->setTimezone(new DateTimeZone('Europe/Athens'));
echo $date->format('Y-m-d H:i:s')."\r\n"; // Berlin time
输出(正确)是:
2014-01-30 20:24:48
2014-01-30 21:24:48
2014-01-30 22:24:48
但是,如果我将格式更改为“U”,这是Date()中用于获取时间戳的值,则输出以下内容:
1391113488
1391113488
1391113488
为什么没有应用时区偏移的时间戳出现?
答案 0 :(得分:3)
DateTime::getOffset
将以秒为单位给出偏移量,DateTime::getTimestamp
将为您提供 Unix时间戳,始终为UTC (与$datetime->format('U')
相同)
因此,为了获得带有偏移的“时间戳”,请执行以下操作:
$timestampWithOffset = $date->getTimestamp() + $date->getOffset();