新日期('" 2017-12-31"')和新日期(" 2017-12-31")之间有什么区别?

时间:2017-11-20 09:54:01

标签: javascript date

我有一个日期字符串" 2017-12-31" 当我在new Date("2017-12-31")中传递它时,它会给出输出

Sat Dec 30 2017 12:00:00 GMT-1200 (Local Standard Time)

当我像new Date('"2017-12-31"')new Date("'2017-12-31'")那样给出时,它会给出输出

Sun Dec 31 2017 00:00:00 GMT-1200 (Local Standard Time)

我无法理解为什么会这样。任何人都可以解释一下。

1 个答案:

答案 0 :(得分:3)

在第一种情况下,您在the only format the Date object is required to support中传递了有效的日期时间字符串。当您这样做时,规范要求将您传递给它的日期字符串视为UTC,因为它没有时间部分(如果字符串中有时间,则需要将其视为本地时间)。 (可悲的是,在最近的几个规范版本中,这种情况有所不同。现在它已经稳定了。)

在第二种情况下,你传递它是无意义的("'都不应该在日期/时间字符串中),这意味着实现可以回退到任何实现定义的机制解析它想要的字符串,它可以选择将其解释为 local 时间。显然,你的实现正在这样做(而不是更合理的方法 - 恕我直言 - 创建一个无效的日期)。由于您的时区是GMT-1200,结果是两次相隔12小时。

故事的道德:只传递所需格式的字符串,或自己解析。