PHP MongoDate/DateTime 错误或误解
PHP MongoDate/DateTime bug or missunderstanding
MongoDate 功能有问题吗?
当我将 DateTime 对象转换为 MongoDate,然后尝试将其转换回 DateTime 时,我得到了一个完全不同的值。请记住,我们讨论的是 EPOCH 限制内的日期。
这是重现问题的方法。
$dateTime = new DateTime( '2015-07-20 10:15:45', new DateTimeZone( 'Europe/London' ) );
$mongoDate = new MongoDate( $dateTime->getTimeStamp() );
echo $mongoDate->sec ."\n"; // 1437383745
echo date( 'Y-m-d H:i:s', $mongoDate->sec ) ."\n"; // 2015-07-20 11:15:45
$dateTime2 = $mongoDate->toDateTime();
echo $dateTime2->format('Y-m-d H:i:s') ."\n"; // 1969-12-15 10:41:40
这种行为正常吗?
您遇到时区问题。当您创建 DateTime 对象时,您会在 Europe/London
时区中创建它。但是当你 "convert" 秒回到日期时间格式时,你使用 date()
函数,它使用默认时区,这显然不同于 Europe/London
.
使用 $mongoDate->sec
创建 DateTime 对象,然后转换时区。
$dt = new DateTime('@' . $mongoDate->sec);
$dt->setTimezone(new DateTimeZone('Europe/London'));
echo $dt->format('c');
MongoDate 功能有问题吗?
当我将 DateTime 对象转换为 MongoDate,然后尝试将其转换回 DateTime 时,我得到了一个完全不同的值。请记住,我们讨论的是 EPOCH 限制内的日期。
这是重现问题的方法。
$dateTime = new DateTime( '2015-07-20 10:15:45', new DateTimeZone( 'Europe/London' ) );
$mongoDate = new MongoDate( $dateTime->getTimeStamp() );
echo $mongoDate->sec ."\n"; // 1437383745
echo date( 'Y-m-d H:i:s', $mongoDate->sec ) ."\n"; // 2015-07-20 11:15:45
$dateTime2 = $mongoDate->toDateTime();
echo $dateTime2->format('Y-m-d H:i:s') ."\n"; // 1969-12-15 10:41:40
这种行为正常吗?
您遇到时区问题。当您创建 DateTime 对象时,您会在 Europe/London
时区中创建它。但是当你 "convert" 秒回到日期时间格式时,你使用 date()
函数,它使用默认时区,这显然不同于 Europe/London
.
使用 $mongoDate->sec
创建 DateTime 对象,然后转换时区。
$dt = new DateTime('@' . $mongoDate->sec);
$dt->setTimezone(new DateTimeZone('Europe/London'));
echo $dt->format('c');