日期对象和ISO日期对象返回不同的日期

时间:2016-04-01 15:44:30

标签: javascript node.js mongodb datetime mongodb-query

我需要捕获日期值,将其解析为ISODate,然后查询存储具有日期值的对象的mongoDB集合。查询检查事件日期之间的相等性,并将其与确定日期是否属于周末的函数进行匹配。一切正常,但是如果日期是星期一,它也会在结果上得到实现。

我注意到的是当我们使用toISOString时,日期对象会移回一天:

日期对象

Mon Apr 18 2016 00:00:00 GMT+0100 (BST)

toISOString:

2016-04-17T23:00:00.000Z

注意它现在有17日作为日期?

这种不一致也存在于数据库中:

{
    "_id" : ObjectId("56fe91afceb044f551dbffce"),
    "url" : "http://www.timeoutshanghai.com/features/Blog-Food__Drink/35271/Baristas-showcase-latte-art-in-Shanghai.html",
    "title" : "Baristas showcase latte art in Shanghai - Blog - Time Out - Shanghai",
    "selectedDate" : ISODate("2016-04-17T23:00:00Z"), 
    "__v" : 0
}

这应该给selectedDate" : ISODate("2016-04-17T23:00:00Z")

但是,如果我们将集合记录到控制台,则日期将作为星期一返回:

  { _id: 56fe91c5ceb044f551dbffcf,
    url: 'http://www.timeoutshanghai.com/features/Blog-Food__Drink/35271/Baristas-showcase-latte-art-in-Shanghai.html',
    title: 'Baristas showcase latte art in Shanghai - Blog - Time Out - Shanghai',
    selectedDate: Mon Apr 18 2016 00:00:00 GMT+0100 (BST),
    __v: 0 },

当我查询数据库只返回周末事件时,这会成为一个问题,因为星期一正在滑倒。

1 个答案:

答案 0 :(得分:4)

您有2个不同的时区:

  • toISOString()返回格式为UTC + 00:00的日期,该日期由末尾Z的{​​{1}}标志指示。
  • 您的约会对象2016-04-17T23:00:00.000Z(可能使用Mon Apr 18 2016 00:00:00 GMT+0100 (BST)格式化)格式化为您当前的时区:GMT + 01:00。

这就是你在1小时内得到这种差异的原因 详细了解iso date format