3 Stimmen

javascript - string zu datum - php iso string format

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?

6voto

thirtydot Punkte 218830

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.

4voto

kgiannakakis Punkte 100768

Vielleicht ist das ein Overkill, aber versuchen Sie Datejs

4voto

dheerosaur Punkte 13811

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

3voto

Roman Dvornov Punkte 131

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")

2voto

darioo Punkte 45156
var someDate = new Date("2010-11-30T08:32:22+0000");

Ich glaube nicht, dass es einfacher sein könnte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X