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

Bre*_*ett 9 javascript datetime mongodb

我有一个字符串格式的日期,我试图将其作为一种类型进入MongoDBDateTime。日期字符串已经是UTC格式,并且是2017-11-30 19:41:00:677.

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

{
    "timestamp": new Date("2017-11-30 19:41:00:677"),
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

如何告诉 Mongo 时区已经在 UTC 中?

Don*_*ato 7

日期字符串已经在 UTC

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

为您澄清一下,根据 ISO 8601,以下时间未以 UTC 时间存储。这存储在法国巴黎当地时间,UTC 偏移量为 + 1 小时。

1997-07-16T19:20:30.45+01:00
Run Code Online (Sandbox Code Playgroud)

下面的内容以 Z 指定的 UTC 时间存储。因此,不需要 + 偏移量。

2019-08-01T23:00:34.655Z
Run Code Online (Sandbox Code Playgroud)

MongoDB 存储日期如下:

ISODate("2019-08-05T02:50:49.637Z")
Run Code Online (Sandbox Code Playgroud)

ISODate() 是一个内置于 MongoDB 并包装原生 JavaScript 日期对象的辅助函数。


小智 6

默认情况下,MongoDB 以 UTC 存储时间,并将任何本地时间表示形式转换为这种形式。必须对某些未修改的本地时间值进行操作或报告的应用程序可以将时区与 UTC 时间戳一起存储,并在其应用程序逻辑中计算原始本地时间。

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