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

Date object and ISO date object return different dates

本文关键字:日期 对象 ISO 返回      更新时间:2023-10-26

我需要捕获一个日期值,将其解析为ISODate,然后查询存储具有日期值的对象的mongoDB集合。查询检查事件的日期是否相等,并将其与确定日期是否在周末的函数相匹配。一切都很好,但如果日期是星期一,结果也会出来。

我注意到,当我们使用ISOString:时,日期对象会向后移动一天

日期对象

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 },

当我查询DB只在周末返回事件时,这就成了一个问题,因为周一的事件正在流逝。

您有两个不同的时区:

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

这就是为什么你能在1小时内得到这种差异
阅读有关iso日期格式的更多信息。