不要使用Date對象來解析日期字符串,它在ECMAScript ed 3中被指定爲依賴於實現的實現,並且在瀏覽器中不一致地工作。 ISO8601日期字符串的一種格式是specified in ES5,但這也不一致。手動解析字符串。
一對夫婦的功能轉換和從UTC ISO8601字符串:
if (!Date.prototype.toUTCISOString) {
Date.prototype.toUTCISOString = function() {
function addZ(n) {
return (n<10? '0' : '') + n;
}
function addZ2(n) {
return (n<10? '00' : n<100? '0' : '') + n;
}
return this.getUTCFullYear() + '-' +
addZ(this.getUTCMonth() + 1) + '-' +
addZ(this.getUTCDate()) + 'T' +
addZ(this.getUTCHours()) + ':' +
addZ(this.getUTCMinutes()) + ':' +
addZ(this.getUTCSeconds()) + '.' +
addZ2(this.getUTCMilliseconds()) + 'Z';
}
}
if (!Date.parseUTCISOString) {
Date.parseUTCISOString = function fromUTCISOString(s) {
var b = s.split(/[-T:\.Z]/i);
var n= new Date(Date.UTC(b[0],b[1]-1,b[2],b[3],b[4],b[5]));
return n;
}
}
var s = '2012-05-21T14:32:12Z'
var d = Date.parseUTCISOString(s);
alert('Original string: ' + s +
'\nEquivalent local time: ' + d +
'\nBack to UTC string: ' + d.toUTCISOString());
是一個比其他更好嗎? datejs有一個很長的沒有人分配的錯誤列表。是moment.js更好? –
你使用的函數中的一個錯誤是一個殺手。您不使用的功能中的許多錯誤不會影響您。買者自負! – HBP
即使使用日期庫,也必須告訴它格式,以便知道如何解析字符串。所以你必須從一開始就知道格式,如果你知道格式,手動解析它並不是很難。 – RobG