gpt4 book ai didi

MongoDB 日期和 ISODate 解析

转载 作者:可可西里 更新时间:2023-11-01 09:29:01 24 4
gpt4 key购买 nike

问题在 MongoDB 中将字符串解析为日期时,推荐的实现是什么?

我问这个是因为我们有供应商以“2017-01-01”和“2017/01/01”的格式向我们发送日期的字符串表示形式。我原以为使用 Date() 和 ISODate() 在 MongoDB 中解析这些不同的字符串会返回相同的结果。

给定以下通过 MongoChef 针对 MongoDB 3.4 运行的示例

1. print(new Date("2016-01-01"))
2. print(new Date("2016/01/01"))
3. print(new ISODate("2016-01-01"))
4. print(new ISODate("2016/01/01"))

产生以下结果

1. Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time)
2. Fri Jan 01 2016 00:00:00 GMT-0600 (Central Standard Time)
3. Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time)
4. 2017-01-06T10:34:01.814-0600 E QUERY [thread1] Error: invalid ISO date

这对我来说没有任何意义。任何可以向我解释这一点的人将不胜感激。

我可以接受的选项是选项 #2,因此我确保我们的日期都用“/”分隔,并使用新的 Date() 构造函数。

最佳答案

“2017-01-01”“2017/01/01”。简而言之,第一个是 ISO 格式,因此它将解析为 UTC 时间,第二个是非 ISO 格式,将解析为本地时区的时间。

考虑 Mongo shell 中的输出。所有时间均以 UTC 时间显示。

1.new Date("2016-01-01") ---- ISODate("2016-01-01T00:00:00Z")
2.new Date("2016/01/01") ---- ISODate("2016-01-01T06:00:00Z")
3.new ISODate("2016-01-01") ---- ISODate("2016-01-01T00:00:00Z")
4.new ISODate("2016/01/01") ----2017-01-06T11:14:56.862-0600 E QUERY [thread1] Error: invalid ISO date :

Mongo 数据库以 UTC 时间保存所有日期。

Mongo Chef 将以上所有保存的 UTC 日期时间值转换为本地时区(-06:00 偏移),仅用于显示目的。

所以选择在 ISODate("2016-01-01T00:00:00Z")ISODate("2016-01-01T06:00:00Z").

两者都是 UTC 日期时间。看起来您只对日期部分感兴趣(时间部分设置为午夜),选项 2 (new Date("2016/01/01") ---- ISODate("2016-01-01T06: 00:00Z")) 将是您的选择,只要您以与保存时相同的方式创建日期,所有比较查询都可以正常工作。

引用:

https://docs.mongodb.com/manual/reference/bson-types/#document-bson-type-date

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

关于MongoDB 日期和 ISODate 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41510633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com