我输入new Date("2017-01-01")铬控制台,输出显示其小时为8,但new Date("2017-01-1")并new Date("2017-1-01")展示他们的时间都为0,那么,如何new Date(dateString)解析?
new Date("2017-01-01")
// Sun Jan 01 2017 08:00:00 GMT+0800 (??????)*
new Date("2017-01-1")
// Sun Jan 01 2017 00:00:00 GMT+0800 (??????)*
new Date("2017-1-1")
// Sun Jan 01 2017 00:00:00 GMT+0800 (??????)*
new Date("2017-1-01")
// Sun Jan 01 2017 00:00:00 GMT+0800 (??????)*
Run Code Online (Sandbox Code Playgroud)
Der*_*會功夫 78
"2017-01-01"遵循ISO标准 ES5日期时间字符串格式(ISO 8601扩展格式的简化),因此它是UTC时间,即中国的早上8点.所有其他字符串在Chrome 1中被解析为本地时间.
1 Chromium中的相关源代码:https://cs.chromium.org/chromium/src/v8/src/dateparser-inl.h? type = cs &l = 16
Chromium中的日期解析遵循标准ES5规则以及这些额外规则:
:是一个时间值,并被添加到TimeComposer.后跟一个数字::也会增加第二个零.后跟的数字.也是时间,必须后跟毫秒.任何其他数字是日期组件并添加到DayComposer.Day作曲家中记录为命名月份.(+|-)(hhmm|hh:).+或-)或不匹配)(在第一个数字之前,允许任何垃圾)."1970-01-01"将在UTC时区而不是本地时区.首先请注意,"2017-01-01"在UTC时间解析,因为它是"日期"字符串而不是"日期时间"字符串,并且它匹配"日期"字符串的ES5定义.如果附加时间,则它将遵循ISO标准并在当地时间进行解析.
例子:
2017-01-01 - 2017年1月1日UTC时间2017-01-01T00:00 - 2017年1月1日当地时间2017-1-1 - 2017年1月1日当地时间2017-(hello)01-01 - 2017年1月1日当地时间may 2017-01-01 - 2017年5月1日当地时间mayoooo 2017-01-01 - 2017年5月1日当地时间"jan2017feb-mar01apr-may01jun" - 2017年6月1日当地时间T.J*_*der 18
新日期("2017-01-01")与新日期("2017-1-1")之间的差异
new Date("2017-01-01")是符合规范的(更多信息如下).new Date("2017-1-1")不是,因此依赖于JavaScript引擎想要应用的任何"......特定于实现的启发式或特定于实现的日期格式".例如,您无法保证它将如何(或是否)成功解析,如果是,它是否将被解析为UTC或本地时间.
虽然new Date("2017-01-01")是符合规范,但遗憾的是浏览器应该用它做什么一直是一个移动目标,因为它没有时区指示:
new Date("2017-01-01")用UTC解析.new Date("2017-01-01")被解析为本地时间.-.因此,从ES2016开始,仅以日期形式(如"2017-01-01")以UTC 格式解析,但日期/时间形式(如"2017-01-01T00:00:00")在本地时间解析.遗憾的是,目前并非所有JavaScript引擎都实现了规范.Chrome(撰写本文时,v56)以UTC格式解析日期/时间表,即使它们应该是本地时间(IE9也是如此).但Chrome,Firefox和IE11(我没有IE10或Edge方便)都正确处理仅限日期的表格(如UTC).IE8根本没有实现ISO-8601格式(在ES5规范发布之前已经发布).
| 归档时间: |
|
| 查看次数: |
6491 次 |
| 最近记录: |