做使用Date构造函数不解析字符串。它称为Date.parse尽管在ES5中为ISO 8601字符串的一个版本进行了标准化,但仍然几乎完全依赖于实现。
我想在不改变时区的情况下将日期字符串转换为日期对象。
> new Date ("2014-10-24T00:00:00")
该字符串将浏览器而不同对待。如果你希望它是作为UTC处理,那么很简单解析自己:
function parseISOAsUTC(s) {
var b = s.split(/\D/);
return new Date(Date.UTC(b[0],--b[1],b[2],b[3],b[4],b[5],(b[6]||0)));
}
console.log(parseISOAsUTC('2014-10-24T00:00:00').toISOString()); // 2014-10-24T00:00:00.000Z
现在你可以肯定的是,该字符串将作为UTC使用(包括20%左右的被视为在所有浏览器仍然使用IE 8及更低版本)。
如果,另一方面,你希望字符串被当作本地时间,然后就取出Date.UTC部分:
function parseISOAsLocal(s) {
var b = s.split(/\D/);
return new Date(b[0],--b[1],b[2],b[3],b[4],b[5],(b[6]||0));
}
console.log(parseISOAsLocal('2014-10-24T00:00:00')); // Fri 24 Oct 2014 00:00:00 <local timezone>
感谢zerkms,即伟大工程。我将添加它作为答案。 – Sean 2014-09-25 00:17:21
'新日期('2014-10-24 00:00:00')'在Safari和Firefox中返回*无效日期*。 – RobG 2014-09-25 01:16:58
你说得对。我在一个需要支持IE9的网站上使用它,并且IE不会将其视为有效的日期。 – Sean 2014-09-25 01:35:26