2

MongoDB我在via中插入数据,PHP一个字段是日期。因此,根据 MongoDB 文档,我使用 anew MongoDate()来做到这一点。

在 MongoDB 中,日期存储为ISODate("2013-07-03T22:56:12Z"). 这意味着我的时区是Z(= 0Z),因此时区等于 0。
但我在美国西海岸,我所在位置的时区是8Z(太平洋时间)。

当我new Date()在终端输入 Mongo 时,一切正常。日期是ISODate("2013-07-03T22:56:128Z"),所以这是正确的时区8Z

我的开发环境是Windows,MongoDB是2.4.4版本

是否需要在 MongoDB、PHP 代码或 php.ini 中进行设置以避免此错误?

4

3 回答 3

3

您的数据库日期应为 UTC;然后 PHP 应该相应地调整 - 通常使用date_default_timezone_set. 之后,您可以从数据库中获取日期并将其插入gmdate("y-m-d", strtotime($date))例如。

于 2013-07-04T00:46:05.460 回答
3

8Z不是以 ISO8601 格式表示时区偏移的有效方式。正确的方法是:

2013-07-03T22:56:12-08:00

除了- 您提供的日期之外,美国太平洋时间是夏令时,因此-8不是正确的偏移量。应该是-7

2013-07-03T22:56:12-07:00

您应该了解,许多时区在一年中都有不止一个偏移量。请参阅时区标签 wiki中的“时区!= 偏移量” 。

也就是说,我不确定 MongoDB 是否支持时区偏移,或者您是否需要使用 UTC。也许其他人可以在这方面发表评论或回答。

于 2013-07-04T01:05:35.157 回答
0

最新的 MongoDate 类作为 toDateTime() 函数,允许您设置时区。

$mongoDate = new \MongoDate();
$dateTime = $mongoDate->toDateTime()->setTimezone(new \DateTimeZone(date_default_timezone_get()))

另一种方法是手动创建日期,如下所示。

//2017-02-03T13:37:07.000+00:00           
$currentDateTime = date('Y-m-d', time()).'T'.date('H:i:s', time()).'.000+00:00';
$mongoDate = new \MongoDate(strtotime($currentDateTime));
于 2017-02-03T02:46:29.790 回答