Javascript 2011年11月15日和2011年11月15日的不同日期分析结果

Javascript 2011年11月15日和2011年11月15日的不同日期分析结果,javascript,datetime,date-parsing,Javascript,Datetime,Date Parsing,为什么Date.parse(“2011-11-15”)会在Web浏览器中考虑当前时区,而Date.parse(“2011/11/15”)不会?为什么结果不同?根据的第15.9.1.15节,第一种形式被视为UTC的ISO日期。根据第15.9.4.2节的规定,第二种形式是以具体实施的方式考虑的: parse函数将ToString运算符应用于其参数,并将结果字符串解释为日期 和时间;它返回一个数字,即与日期和时间相对应的UTC时间值。字符串可能是 解释为本地时间、UTC时间或其他时区的时间,具体取决于

为什么
Date.parse(“2011-11-15”)
会在Web浏览器中考虑当前时区,而
Date.parse(“2011/11/15”)
不会?为什么结果不同?

根据的第15.9.1.15节,第一种形式被视为UTC的ISO日期。根据第15.9.4.2节的规定,第二种形式是以具体实施的方式考虑的:

parse
函数将
ToString
运算符应用于其参数,并将结果字符串解释为日期 和时间;它返回一个数字,即与日期和时间相对应的UTC时间值。字符串可能是 解释为本地时间、UTC时间或其他时区的时间,具体取决于 一串函数首先尝试根据日期时间字符串格式(15.9.1.15)中调用的规则解析字符串的格式。如果字符串不符合该格式,函数可能会返回到任何 特定于实施的试探法或特定于实施的日期格式

因此,我怀疑“2011/11/15”正在转换为11月15日的当地午夜,而“2011-11-15”正在转换为11月15日的UTC午夜

日期/时间字符串可以是ISO 8601格式。从 JavaScript 1.8.5/Firefox4,支持ISO 8601的子集。对于 例如,“2011-10-10”(仅日期)或“2011-10-10T14:48:00(日期和时间 时间)可以传递和分析。ISO日期中的时区尚未被解析 支持,因此例如“2011-10-10T14:48:00+0200”(带时区)不支持 给出预期的结果


请看+1中的答案。正如引用的最后一句话所表明的,此外,不能保证实现将以不同或相同的方式解析“2011-11-15”或“2011/11/15”。@PeterO.:的确。解析“2011-11-15”“这是保证,但仅此而已。谢谢你,乔恩!下次将参考ECMA规范:)值得澄清的是,这就是Firefox的Date.parse文档。@JonSkeet没有一个特定的网站有java脚本文档,所以我总是参考MDC。如果你知道任何好的网站,那么请向我推荐。谢谢:)请参阅我的答案,它涉及ECMA-262规范。但即使不存在这种情况,也值得明确说明您使用的是哪种变体。我看过MDC文档,但它并没有回答这个问题——为什么存在这种差异。ECMA更具体,谢谢!