我正在使用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()对象不更改为当地时间?
答案 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)”)。