PHP MongoDate/DateTime错误或理解错误

PHP MongoDate/DateTime错误或理解错误,php,datetime,mongodate,Php,Datetime,Mongodate,MongoDate功能有什么问题吗 当我将DateTime对象转换为MongoDate,然后尝试将其转换回DateTime时,我得到了一个完全不同的值。请记住,我们谈论的是一个时代范围内的日期 这里有一个重现问题的方法 $dateTime = new DateTime( '2015-07-20 10:15:45', new DateTimeZone( 'Europe/London' ) ); $mongoDate = new MongoDate( $dateTime->getTimeS

MongoDate功能有什么问题吗

当我将DateTime对象转换为MongoDate,然后尝试将其转换回DateTime时,我得到了一个完全不同的值。请记住,我们谈论的是一个时代范围内的日期

这里有一个重现问题的方法

$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对象时,需要在
欧洲/伦敦
时区中创建它。但是,当您将秒“转换”回datetime格式时,您将使用
date()
函数,该函数使用默认时区,这显然不同于
Europe/London

使用
$mongoDate->sec
创建DateTime对象,然后转换时区

$dt=新日期时间('@'$mongoDate->sec);
$dt->setTimezone(新日期时区(“欧洲/伦敦”);
echo$dt->format('c');

您有时区问题。创建DateTime对象时,需要在
欧洲/伦敦
时区中创建它。但是,当您将秒“转换”回datetime格式时,您将使用
date()
函数,该函数使用默认时区,这显然不同于
Europe/London

使用
$mongoDate->sec
创建DateTime对象,然后转换时区

$dt=新日期时间('@'$mongoDate->sec);
$dt->setTimezone(新日期时区(“欧洲/伦敦”);
echo$dt->format('c');