当MongoDB插入日期时,它将其转换为UTC

时间:2017-11-30 22:06:26

标签: javascript mongodb datetime

我有一个字符串格式的日期,我试图进入 MongoDB 作为DateTime类型。日期字符串已在 UTC 中,格式为2017-11-30 19:41:00:677

插入MongoDB时,我正在插入数据:

{
    "timestamp": new Date("2017-11-30 19:41:00:677"),
    ...
}

然而,当我这样做时,日期被认为是当地时间(似乎),并且Mongo通过添加4小时将其转换为UTC。然而 19:41 已经是UTC。

我如何告诉Mongo时区已经是UTC?

3 个答案:

答案 0 :(得分:1)

  

MongoDB默认以UTC格式存储时间,并将转换为任何本地时间   时间表示形式。必须运行的应用程序或   报告某些未修改的本地时间值可以存储时区   与UTC时间戳一起计算原始本地时间   他们的应用逻辑。

https://docs.mongodb.com/v3.2/tutorial/model-time-data/

答案 1 :(得分:0)

  

日期字符串已经使用UTC

您可能会认为您的日期使用UTC,而不是需要UTC偏移的本地日期时间。但是在处理时区时,它不符合ISO 8601国际标准。要指定时区时,必须使用时区指示符。 MongoDB以UTC格式存储日期,ISO要求使用时区标记“ Z”来表示UTC时间。

为便于您进行说明,根据ISO 8601,以下时间未存储在UTC时间中。该时间存储在法国巴黎的当地时间,UTC时间为+ 1小时。

1997-07-16T19:20:30.45+01:00

以下将其存储在Z指定的UTC时间中。因此,不需要+偏移。

2019-08-01T23:00:34.655Z

MongoDB存储日期如下:

ISODate("2019-08-05T02:50:49.637Z")

ISODate()是MongoDB内置的一个辅助函数,用于包装本机JavaScript Date对象。

答案 2 :(得分:0)

试试

new \MongoDB\BSON\UTCDateTime($your_datetime)

new \MongoDB\BSON\UTCDateTime((new Datetime())->getTimestamp()*1000)

参考这个,我已经用过了。