ECMAScript 5.1规范不正确?日期构造函数日期/时间格式解析为UTC

ECMAScript 5.1 specification incorrect? Date constructor date/time format parsed as UTC

本文关键字:日期 格式 时间 UTC 构造函数 不正确 ECMAScript      更新时间:2023-09-26

根据维基百科的ISO-8601条款(我知道,来源不好)…

如果没有给出带有时间表示的UTC关系信息,则假定该时间为本地时间。

所以,例如…鉴于:

  • var a = Date.parse("2012-03-21");
  • var b = Date.parse (2012 - 03 - 21 t00:00);
  • var c = Date.parse("2012-03-21T00:00Z");

我希望"a"answers"b"是本地时间(浏览器的时区),而"c"是UTC。但是,a、b和c都是等价的(1332288000000)。所有值都解析为UTC。

ECMAScript规范也清楚地说明了这一点:

15.9.1.15日期时间字符串格式

不存在的时区偏移值为"Z"。

为什么会有这种差异?是维基百科不正确还是ECMAScript规范不正确?如何将ISO-8601字符串解析为浏览器中的本地时间(不知道浏览器的时区)?

是,ES5.1不正确。

ECMAScript 6草案现在说"如果没有时区偏移,日期时间将被解释为本地时间。"

如何将ISO-8601字符串解析为浏览器中的本地时间(不知道浏览器的时区)?

使用toLocaleString方法:

var foo = new Date("2012-03-21").toLocaleString()
var bar = new Date("2012-03-21T00:00").toLocaleString()
var baz = new Date("2012-03-21T00:00Z").toLocaleString()

引用

    日期和时间格式