我有一个时间戳,我试图将其转换为另一个时区。我需要在这样做时考虑DST进行考虑。
我使用的代码如下:
$date = new DateTime("@".$timestamp);
echo $date->format('Y-m-d H:i:s')."rn";
$date->setTimezone(new DateTimeZone('Europe/Paris'));
echo $date->format('Y-m-d H:i:s')."rn"; // Pacific time
$date->setTimezone(new DateTimeZone('Europe/Athens'));
echo $date->format('Y-m-d H:i:s')."rn"; // Berlin time
输出(正确)是:
2014-01-30 20:24:48
2014-01-30 21:24:48
2014-01-30 22:24:48
但是,如果我将格式更改为" u",那是在日期()中使用的值以获取时间戳,则以下是输出:
1391113488
1391113488
1391113488
为什么将时间戳不带有时区偏移量?
DateTime::getOffset
将在几秒钟内为您提供偏移,而DateTime::getTimestamp
将为您提供 UNIX TIMESTAMP,它始终为UTC (像$datetime->format('U')
一样给您一样。
因此,为了获得偏移的"时间戳",请执行此操作:
$timestampWithOffset = $date->getTimestamp() + $date->getOffset();