为什么new Date('2017-01-01')他们new Date('2017-1-1')给出不同的时间?
new Date(dateString)它在 Chrome 中是如何解析的?
[
new Date("2017-01-01"),
new Date("2017-01-1"),
new Date("2017-1-1"),
new Date("2017-1-01")
].forEach(date => console.log(date));
为什么new Date('2017-01-01')他们new Date('2017-1-1')给出不同的时间?
new Date(dateString)它在 Chrome 中是如何解析的?
[
new Date("2017-01-01"),
new Date("2017-01-1"),
new Date("2017-1-1"),
new Date("2017-1-01")
].forEach(date => console.log(date));
“2017-01-01”遵循ISO标准,对应UTC时间。
任何其他格式的字符串,在 Chrome 1中解析为本地时间。
通常(在其他浏览器中),这种行为是
зависит от реализации.1 Chromium中对应的源码
Chromium 中的日期解析遵循 ES5 标准的规则,但有以下例外:
:时间。它被添加到TimeComposer. 数字 c::表示 0 秒。数字 c.也是时间,后面应该跟毫秒。任何其他作为日期组成部分的数字都会添加到DateComposer.DayComposer.(+|-)(hhmm|hh:).+/-或不一致)(在第一个数字之前允许有任何垃圾)。"1970-01-01"使用 UTC,而不是本地时区。这是什么意思?
对于初学者来说,
2017-01-01它是在 UTC 中解析的,因为它是一个“日期”字符串,而不是一个“日期时间”字符串。它还符合 ES5 对“日期”字符串的定义。如果加上时间,会按照ISO标准识别当地时区。
例子:
2017-01-01- 2017 年 1 月 1 日在 UTC2017-01-01T00:00——当地时间2017年1月1日2017-1-1——当地时间2017年1月1日2017-(hello)01-01——当地时间2017年1月1日май 2017-01-01——当地时间2017年1月1日mayoooo 2017-01-01——当地时间2017年1月1日"jan2017feb-mar01apr-may01jun"- 当地时间2017年6月1日对 enSO 的响应