根据维基百科的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"one_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()
引用
- 日期和时间格式