有人可以解释为什么以下代码段会导致无效的日期对象吗?
new Date(new Date().toLocaleString())
// or
Date.parse(new Date().toLocaleString())
答案 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),并且toString
或toUTCString
方法无法在该实现中生成。
由于toLocaleString
不需要生成符合日期时间字符串格式YYYY-MM-DDTHH:mm:ss.sssZ
的字符串,因此允许Date.parse
无法正确解析其输出。