在Windows上的MongoDB Shell中,如果运行值为的查询
new ISODate('0001-01-01T00:00:00Z')
它实际上似乎在搜索
new ISODate('1901-01-01T00:00:00Z')
如果直接在Mongo Shell中输入“new ISODate('0001-01-01T00:00:00Z')”,则可以看到此转换发生时返回ISODate(“1901-01-01T00:00:00Z”) .
奇怪的是,当您使用“新日期”代替“新ISODate”时输入:
new Date('0001-01-01T:00:00:00Z')
它返回正确的ISODate(“0001-01-01T00:00:00Z”) .
根据the docs,两者都应该返回一个ISODate,在我看来应该采取相同的行动 . 有谁知道他们为什么不知道错误或功能?
1 回答
在内部,
new ISODate
真的意味着:IE,MongoDB将字符串拆分为带有正则表达式的元素(第25行,位于https://github.com/mongodb/mongo/blob/master/src/mongo/shell/types.js#L56)
JavaScript Date对象有几个不同的初始化器(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax) . 如果您使用:
那么四位数年份
0001
不会被解析或解释,但是当你像MongoDB一样使用它时:然后适用00-99岁的特殊规则 . https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Date_instances的文档稍微暗示了这一点 .
已经在https://jira.mongodb.org/browse/SERVER-8164有一张MongoDB服务器票,请投票支持 .