为什么在Node REPL中返回有效日期时,新的Date在mongo shell中返回无效?

时间:2016-11-07 16:21:56

标签: javascript node.js mongodb

在Mongo(技术上是RoboMongo):

db.audit.find({source: "junebug"}).limit(50).forEach(function (doc){

  print(JSON.stringify(doc)); 
  print(doc.start);
  doc.startDt = new Date(doc.start + 'Z');

  print(doc.startDt);
});

产生类似的东西:

{"_id":{},"source":"junebug","maxDays":0.05,"start":"2016-11-03 00:00:00","end":"2016-11-03 00:59:59" ...
2016-11-03 00:00:00
Invalid Date

因此,"2016-11-03 00:00:00"+"Z"无效。但是在Node REPL中:

> var d = new Date("2016-11-03 04:00:00"+"Z")
undefined
> d
2016-11-03T04:00:00.000Z

看起来有效。已验证。我无法解释为什么会发生这种情况。我无法想象Node 6和Mongo的js引擎之间的日期解析会有所不同。

1 个答案:

答案 0 :(得分:1)

Mongodb日期对象仅接受以下参数。

您可以通过将Date()方法传递给datetime字符串来指定特定日期。例如:

新日期(" YYYY-mm-dd"),它返回指定日期的ISODate。

新日期(" YYYY-mm-ddTHH:MM:ss"),它指定本地日期时间的日期时间,并返回带有指定日期时间的ISODate,以UTC为单位。

新日期(" YYYY-mm-ddTHH:MM:ssZ"),它以UTC格式指定日期时间,并返回带有指定日期时间的ISODate格式。

您的格式无效,这就是它发出错误的原因。

https://docs.mongodb.com/manual/reference/method/Date/