我有一个字符串格式的日期,我试图进入 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?
答案 0 :(得分:1)
MongoDB默认以UTC格式存储时间,并将转换为任何本地时间 时间表示形式。必须运行的应用程序或 报告某些未修改的本地时间值可以存储时区 与UTC时间戳一起计算原始本地时间 他们的应用逻辑。
答案 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)
参考这个,我已经用过了。