当前位置: 首页 > 知识库问答 >
问题:

为什么MongoDB shell新ISODate(0001-01-01)返回日期1901-01-01

耿和韵
2023-03-14

在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”)时看到正在进行的转换。

奇怪的是,当您使用“new Date”而不是“new ISODate”时,请输入:

new Date('0001-01-01T:00:00:00Z')

它返回正确的ISODate(“0001-01-01T00:00:00Z”)。

根据文件,两者都应该返回一个ISODate,在我看来应该是一样的。有人知道他们为什么不知道,这是一个bug还是一个特性吗?

共有1个答案

楚昊明
2023-03-14

在内部,新的ISODate实际上意味着:

Date.UTC(year, month, date, hour, min, sec, ms);

IE,MongoDB使用正则表达式将字符串拆分为元素(第60行,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)。如果您使用:

new Date("0001-01-01T:00:00:00");

然后,不会解析或解释四位数年份0001,但当您像MongoDB那样使用它时:

Date.UTC( parseInt("0001") )

然后,特殊规则适用于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服务器票证,请投赞成票。

 类似资料:
  • 问题内容: 我正在使用具有以下格式mm / dd / yyyy的jquery datepicker,但我需要它是sql数据库的yyyy-mm-dd,所以我正在使用它。 与以下 不幸的是,无论输入什么,我都会在数据库中注册1970-01-01。有什么想法我做错了吗?非常感谢你的帮助。 问题答案: 当您从那里回来时,意味着时间戳不正确。该日期是UNIX时代。 当涉及到Javascript(在这种情况下

  • 问题内容: 我尝试在数据库中为类型为’date’的字段插入值null(DateTime),但始终会得到 ‘0001-01-01’ 。我不明白,该字段“允许为空”,我也不知道为什么要使用这个默认值。 我在MVC(实体框架)中使用C#asp .net,这是我的代码: Last_Modified_Date键入System.DateTime吗?所以我不知道他们为什么要改变这个“空”。 如果我尝试在我的应用

  • 问题内容: 我有一个日期格式为的表格。为了搜索数据库,我将日期格式转换为。但是当我显示它时。PHP代码如下: 为什么会这样呢?如何将其格式化为? 问题答案: 替换为:

  • 我使用SSIS包导入一个基本文本文件,它有3个日期字段,有时一些日期字段是空的。 导入的表显示空字段,我想是因为它们是varchar(50)数据类型。但是我需要将该表中的记录插入到另一个表中,其中这些列被定义为Date数据类型。 当我运行insert语句时,目标表中的结果值都显示日期为1900-01-01,而不是NULL或空白。我试图强制该值为null,但无效: 如何使日期列只接受空白或空值?

  • 问题内容: 我目前正在尝试通过将日期转换为时间戳来在数据集中生成数字特征。如果在Mac上运行,它可以完美运行,在Windows上,它会抛出: 这可能是由于Windows不支持1970-01-01之前的unix时间戳。我的约会日期从1955年开始。这是我的代码: 我在某处看到建议使用,但我不知道如何集成它。 问题答案: 您可以通过(隐式)使用计算“格雷戈里”时间戳来实现,该时间戳对于从1582年10

  • Chrome返回。 Safari为同一函数返回无效日期。 如果“”被“T”替换,那么它可以工作,但我不知道为什么。 新日期('2015-07-01 01:00:00 00:00')在safari上不起作用 新日期('2015-07-01T01:00:00 00:00')适用于两种浏览器 有什么具体原因吗?