为什么解析语言环境日期字符串导致无效日期?

时间:2015-05-01 14:34:24

标签: javascript date

有人可以解释为什么以下代码段会导致无效的日期对象吗?

new Date(new Date().toLocaleString())
// or
Date.parse(new Date().toLocaleString())

2 个答案:

答案 0 :(得分:1)

new Date().toLocaleString()new Date()无法解析的格式返回当前日期,从而导致意外日期。

答案 1 :(得分:1)

ES5 specification's definition of Date.parse(强调我的)明确允许这样做:

  

...如果引用的所有属性都有其初始值,则以下所有表达式都应在该实现中生成相同的数值:

x.valueOf()
Date.parse(x.toString())
Date.parse(x.toUTCString())
Date.parse(x.toISOString())
     

然而,表达

Date.parse(x.toLocaleString())
     

不需要生成与前三个表达式相同的Number值,并且通常, Date.parse生成的值在给定任何String值时依赖于实现不符合日期时间字符串格式15.9.1.15),并且toStringtoUTCString方法无法在该实现中生成。

由于toLocaleString不需要生成符合日期时间字符串格式YYYY-MM-DDTHH:mm:ss.sssZ的字符串,因此允许Date.parse无法正确解析其输出。