Chrome & Firefox: il costruttore di date JavaScript standard accetta la stringa di data ISO 8601. Per esempio:
var sampleDate = new Date("2010-03-07T02:13:46Z");
restituisce questo oggetto Date: "Sun Mar 07 2010 13:13:46 GMT + 1100 (AUS Eastern Daylight Time)"
Questo non funziona in IE (tra cui più recente IE 9)
Ecco una soluzione cross-browser da Paul Sowden a http://delete.me.uk/2005/03/iso8601.html:
Date.prototype.setISO8601 = function (string) {
var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
var d = string.match(new RegExp(regexp));
var offset = 0;
var date = new Date(d[1], 0, 1);
if (d[3]) { date.setMonth(d[3] - 1); }
if (d[5]) { date.setDate(d[5]); }
if (d[7]) { date.setHours(d[7]); }
if (d[8]) { date.setMinutes(d[8]); }
if (d[10]) { date.setSeconds(d[10]); }
if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
if (d[14]) {
offset = (Number(d[16]) * 60) + Number(d[17]);
offset *= ((d[15] == '-') ? 1 : -1);
}
offset -= date.getTimezoneOffset();
time = (Number(date) + (offset * 60 * 1000));
this.setTime(Number(time));
}
Usage:
var date = new Date();
date.setISO8601("2005-03-26T19:51:34Z");
Se si esegue molta manipolazione datetime in JavaScript, si può anche suggerire di controllare alcune librerie JS come MomentJS. Gestisce alcune cose comuni come l'analisi delle date, la formattazione e la differenza di calcolo tra due date e ha il supporto per più localizzazioni.
fonte
2011-06-01 03:20:57
Non intendevo chiuderlo come un duplicato di quella domanda: "( – Ryan
Non sono d'accordo sul fatto che questo è un duplicato esatto della domanda mostrata. L'analisi dei timestamp ISO è una preoccupazione diversa dall'analisi del contributo umano. – Andrew