正确比较Date对象

时间:2014-09-11 21:01:53

标签: javascript date

我正在使用jQuery UI datepicker来显示用户可用的日期范围。我以

的形式从API获取日期范围
"DateRanges": [
  {
    "StartDate": "0001-01-01T00:00:00",
    "EndDate": "0001-01-01T00:00:00"
  }
]

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

例如,如果我使用new Date("2014-08-22");,那么我希望Date对象设置为2014年8月22日中午12:00,而是显示2014年8月21日下午5:00太平洋标准时间。因此,由于转换,我的比较无法正常工作。

在进行比较时,如何强制Date()对象不更改为当地时间?

1 个答案:

答案 0 :(得分:0)

这是因为解析逻辑在您不提供时区时默认为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日”,则解析假设为本地时区,但如果采用ISO格式(如“2014-03-07”),则会假设UTC时区。因此,使用这些字符串生成的Date对象将表示不同的时刻,除非系统设置了UTC的本地时区。这意味着看起来等效的两个日期字符串可能会导致两个不同的值,具体取决于要转换的字符串的格式(ECMAScript ed 6中的此行为已更改,因此两者都将被视为本地)。

所以你也可以使用:

new Date("September 11, 2014");

你将在当地的tz获得一个日期(对我来说输出是:“2014年9月11日星期四00:00:00 GMT-0500(CDT)”)。