首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB日期和ISODate解析

MongoDB日期和ISODate解析
EN

Stack Overflow用户
提问于 2017-01-06 17:05:52
回答 1查看 17K关注 0票数 5

问题当在MongoDB中将字符串解析为日期时,建议实现什么?

我之所以这么问,是因为我们有供应商发送日期的字符串表示,格式为"2017-01-01“和"2017/01/01”。我认为对这些不同字符串的解析将在MongoDB中使用Date()和ISODate()返回相同的结果。

给出了通过MongoChef对MongoDB 3.4运行的以下示例

代码语言:javascript
运行
复制
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"))

产生下列结果

代码语言:javascript
运行
复制
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()构造函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-06 17:41:45

"2017-01-01""2017/01/01".为了保持它的简短,第一个是ISO格式,所以它将解析为UTC时间,第二个解析为非ISO格式,将解析为本地时区中的时间。

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

代码语言:javascript
运行
复制
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 :

门戈db保存UTC时间内的所有日期。

Mongo厨师将上述保存的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

Objects/Date

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41510633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档