PHP DateTime时间戳不正确

时间:2014-01-30 21:28:31

标签: php date timezone

我有一个时间戳,我试图转换为另一个时区。这样做时我需要考虑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

为什么没有应用时区偏移的时间戳出现?

1 个答案:

答案 0 :(得分:3)

DateTime::getOffset将以秒为单位给出偏移量,DateTime::getTimestamp将为您提供 Unix时间戳,始终为UTC (与$datetime->format('U')相同)

因此,为了获得带有偏移的“时间戳”,请执行以下操作:

$timestampWithOffset = $date->getTimestamp() + $date->getOffset();