Ich habe ein Datum im Format von:
2010-11-30T08:32:22+0000
2010-11-27T20:59:17+0000
aus einem Feed, im String-Format zu Javascript, jetzt möchte ich es in ein Date-Objekt konvertieren. Wie kann ich es in javascript tun?
Antworten
Zu viele Anzeigen?Dieser Code funktioniert in IE/Firefox/Chrome:
new Date("2010-11-30T08:32:22+0000".replace(/-/g,'/').replace(/T/,' ').replace(/\+/,' +'))
Es ändert sich 2010-11-30T08:32:22+0000
a 2010/11/30 08:32:22 +0000
und erstellt dann das Datumsobjekt aus der festen Zeichenfolge.
Ich bin mir nicht sicher, ob Sie das verwenden sollten, es scheint wirklich schmutzig zu sein.
Vielleicht ist das ein Overkill, aber versuchen Sie Datejs
Bei diesem Rezept wird die Zeitzone nicht berücksichtigt. Sie müssen es ein wenig mehr hacken, damit es mit TZs funktioniert. Wenn Sie sicher sind, dass die Zeitzone immer +0000
wird dieser Code funktionieren:
var s = "2010-11-30T08:32:22+0000";
// Replace non-digit characters with a space
s = s.replace(/\D/g," ");
// Split the string on space
var date_parts = s.split(" ");
// subtract 1 from month to use in Date constructor
var yyyy = date_parts[0],
mm = date_parts[1] - 1,
dd = date_parts[2],
hh = date_parts[3],
mi = date_parts[4],
ss = date_parts[5];
// Now, the date_parts has year, month, date and so on
var dt = new Date(yyyy, mm, dd, hh, mi, ss);
Dies ist eine etwas ausführliche Version eines Rezepts, das ich von JavaScript-Kochbuch
Neue Browserversionen unterstützen neue Date("2010-11-30T08:32:22+0000") (Chrome, FF4, IE9), alte Browser jedoch nicht.
Wenn die Zeitzone keinen Sinn macht (in Fällen, in denen sie immer Null ist (in Ihrem Fall) oder weggelassen wird), können Sie dies verwenden:
Date.fromISOString = (function(){
function fastDateParse(y, m, d, h, i, s, ms){
return new Date(y, m - 1, d, h || 0, i || 0, s || 0, ms || 0);
}
// result function
return function(isoDateString){
return fastDateParse.apply(null, isoDateString.split(/\D/));
}
})();
Wenn Sie Parse mit Zeitzone benötigen, verwenden Sie dies:
Date.fromISOString = (function(){
var tzoffset = (new Date).getTimezoneOffset();
function fastDateParse(y, m, d, h, i, s, ms){ // this -> tz
return new Date(y, m - 1, d, h || 0, +(i || 0) - this, s || 0, ms || 0);
}
// result function
return function(isoDateString){
var tz = isoDateString.substr(10).match(/([\-\+])(\d{1,2}):?(\d{1,2})?/) || 0;
if (tz)
tz = tzoffset + (tz[1] == '-' ? -1 : 1) * (tz[3] != null ? +tz[2] * 60 + (+tz[3]) : +tz[2]);
return fastDateParse.apply(tz || 0, isoDateString.split(/\D/));
}
})();
Korrekte Formen des Datums:
Date.fromISOString('2011-06-01');
Date.fromISOString('2011-06-01T00:00:00');
Date.fromISOString('2011-06-01T00:00:00Z');
Date.fromISOString('2011-06-01T00:00:00+30');
Date.fromISOString('2011-06-01T00:00:00-30');
Date.fromISOString('2011-06-01T00:00:00+0530');
Date.fromISOString('2011-06-01T00:00:00-0530');
Date.fromISOString('2011-06-01T00:00:00+05:30');
Date.fromISOString('2011-06-01T00:00:00-05:30');
// Your example valid as well.
Date.fromISOString("2010-11-30T08:32:22+0000")
- See previous answers
- Weitere Antworten anzeigen