1

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

这种行为正常吗?

4

1 回答 1

0

你有时区问题。创建 DateTime 对象时,您在Europe/London时区中创建它。但是,当您将秒数“转换”回日期时间格式时,您会使用date()函数,该函数使用默认时区,这显然与Europe/London.

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

$dt = new DateTime('@' . $mongoDate->sec);
$dt->setTimezone(new DateTimeZone('Europe/London'));
echo $dt->format('c');
于 2015-07-20T16:30:18.347 回答