PHP日期时间戳不正确
我有一个时间戳,我正试图转换到另一个时区。这样做时,我需要考虑DST 我使用的代码如下:PHP日期时间戳不正确,php,date,timezone,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"
$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
输出(正确)为:
但是,如果我将格式更改为“U”,这是Date()中用于获取时间戳的值,则会输出以下内容:
1391113488
1391113488
1391113488
为什么时间戳不带应用于它们的时区偏移量?
DateTime::getOffset
将以秒为单位提供偏移量,DateTime::getTimestamp
将提供始终为UTC的Unix时间戳(提供与$DateTime->format('U')相同的格式)
因此,为了获得带有偏移量的“时间戳”,请执行以下操作:
$timestampWithOffset = $date->getTimestamp() + $date->getOffset();
DateTime::getOffset
将以秒为单位提供偏移量,DateTime::getTimestamp
将提供始终为UTC的Unix时间戳(与$DateTime->format('U')
相同)
因此,为了获得带有偏移量的“时间戳”,请执行以下操作:
$timestampWithOffset = $date->getTimestamp() + $date->getOffset();
Unix时间戳始终是UTC格式,因为它们显示为Unix时间戳(这是U
格式给出的),没有时区,但是UTC Unix时间戳的定义:自1970年1月1日午夜起的秒。时区是如何定义的?Unix时间戳总是以UTC表示的,因为它们显示为Unix时间戳(这是U
格式给出的),没有时区,但却是UTC Unix时间戳的定义:自1970年1月1日午夜起的秒数。时区是如何定义的——虽然它不再是UNIX时间戳了,因此也没什么用处。不,它不一定没什么用处。这取决于您的使用情况。@sjkm:您能提供一个有用的例子吗?这是我将要采用的一个选项,但偏移量是否考虑DTC?除非您也知道偏移量是多少,并且在将“时间戳”反向计算为人类可读的时间时将其包括在计算中,时间戳不正确。你真的应该按原样保存时间戳,并另外存储你希望它显示的特定时区,这是你无论如何都需要做的事情。虽然这不再是UNIX时间戳,因此它相当无用。不,它不一定无用。这取决于您的使用情况。@sjkm:您能提供一个有用的例子吗?这是我将要采用的一个选项,但偏移量是否考虑DTC?除非您也知道偏移量是多少,并且在将“时间戳”反向计算为人类可读的时间时将其包括在计算中,时间戳不正确。您应该将时间戳保存为原样,并另外存储您希望它显示的特定时区,这是您无论如何都需要做的事情。