正确比较Date对象



我正在使用jQuery UI日期选择器来显示用户可用的日期范围。我从API以的形式获取日期范围

"DateRanges": [
  {
    "StartDate": "0001-01-01T00:00:00",
    "EndDate": "0001-01-01T00:00:00"
  }
]

问题是,我正在beforeShowDay API映射函数中对日期进行比较,但当我尝试将这些日期转换为JavaScriptDate对象进行比较时,Date()构造函数将日期转换为本地时间,因此导致日期更改。

例如,如果我使用new Date("2014-08-22");,那么我希望Date对象在12:00 AM设置为8/22/2014,但在太平洋标准时间下午5:00显示为8/21/2014。因此,由于转换,我的比较不正确。

在进行比较时,我可以做些什么来强制Date()对象不更改为本地时间?

发生这种情况的原因是,当您不提供UTC时区时,解析逻辑默认为UTC时区。要获得预期时间,请通过一个时区。

new Date("2014-08-22T00:00:00-0700");

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

这是文档中另一个可能会有所帮助的花絮(取决于您如何生成这些日期):

给定日期字符串"2014年3月7日",parse假定为本地时区,但给定ISO格式(如"2014-03-07"),则假定为UTC时区。因此,除非系统设置了UTC的本地时区,否则使用这些字符串生成的日期对象将表示不同的时刻。这意味着,两个看起来等效的日期字符串可能会产生两个不同的值,这取决于正在转换的字符串的格式(ECMAScript ed 6中更改了这种行为,因此两者都将被视为本地)。

所以你也可以使用:

new Date("September 11, 2014");

你会在当地的tz中得到一个日期(对我来说,输出是:"2014年9月11日星期四00:00:00 GMT-0500(CDT)")。