不要将字符串传递给Date构造函数,因为它在解析字符串方面非常糟糕。例如,IE 8无法解析ISO 8601格式的字符串并返回NaN。编写自己的解析器非常简单:
function parseISOString(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]));
}
请注意,如果时间为19:38:34.203 UTC,而您的时区为UTC +0530,则该时区的时间为隔天的01:08:34 am,因此日期会有所不同。例如,对于澳大利亚东海岸但不遵守夏令时(即UTC +10)的人来说,它相当于:
4 November, 2014 05:38:34
编辑
如果你想将其转换为ISO日期格式,可以使用getISO*方法创建适合的格式,例如:
function isoFormatDMY(d) {
function pad(n) {return (n<10? '0' : '') + n}
return pad(d.getUTCDate()) + '/' + pad(d.getUTCMonth() + 1) + '/' + d.getUTCFullYear();
}
var s = '2014-11-03T19:38:34.203Z';
var date = parseISOString(s);
console.log(isoFormatDMY(date))
或者使用ES5的toISOString函数:
parseISOString('2014-11-03T19:38:34.203Z').toISOString()
一个简单的polyfill,用于ES5之前的浏览器:
if (!Date.prototype.toISOString) {
Date.prototype.toISOString = function() {
var d = this;
function pad(n) {return (n<10? '0' : '') + n}
function padd(n){return (n<100? '0' : '') + pad(n)}
return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +
'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' +
pad(d.getUTCSeconds()) + '.' + padd(d.getMilliseconds()) + 'Z';
}
}