为什么javascript会减去传递给Date()函数的ISO日期的时区偏移量?

为什么javascript会减去传递给Date()函数的ISO日期的时区偏移量?,javascript,date,datetime,Javascript,Date,Datetime,我有一个函数,它接收各种(有效)日期字符串并输出JavaScript日期 大多数字符串返回预期的日期,但是,当传入ISO格式的日期(YYYY/MM/DD)时,会从日期中减去用户的时区偏移量 因此: 但是 我发现,通过在ISO日期中添加时间“T00:00:00”来强制时区,可以强制将其设置为正确的日期和时间,但我想知道为什么JavaScript只在ISO日期中减去时区。请注意,Chrome以不同的方式处理您提供的两个日期字符串,而firefox则没有。是一个很好的差异资源 在任何情况下,都不建议解

我有一个函数,它接收各种(有效)日期字符串并输出JavaScript日期

大多数字符串返回预期的日期,但是,当传入ISO格式的日期(YYYY/MM/DD)时,会从日期中减去用户的时区偏移量

因此:

但是


我发现,通过在ISO日期中添加时间“T00:00:00”来强制时区,可以强制将其设置为正确的日期和时间,但我想知道为什么JavaScript只在ISO日期中减去时区。

请注意,Chrome以不同的方式处理您提供的两个日期字符串,而firefox则没有。是一个很好的差异资源


在任何情况下,都不建议解析日期字符串,除非它们是ISO 8601,在这种情况下,它们在浏览器中被一致地解释为UTC。向日期构造函数提供整型参数也是一致的。

请注意,Chrome处理这些日期字符串的方式不同,而firefox则不同。简单的回答是不一样。“跨浏览器一致”仅适用于最近的浏览器。将仅日期表单视为UTC不符合ISO 8601。你一定想知道ECMAScript的作者在想什么。@RobG很确定他们在想“我只有十天的时间来完成这件事”:
new Date("9/1/2017") //returns Fri Sep 01 2017 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date("2017-09-01") //returns Thu Aug 31 2017 20:00:00 GMT-0400 (Eastern Daylight Time)