2009-12-06 6 views
9

Dies ist wahrscheinlich etwas einfach, aber ich bin ein bisschen verwirrt, wie dies zu tun ist. Wie kann ich mit Hilfe von JavaScript, analysiere nur die Zeit, aus dem folgende ISO 8601 Datum string:Verwenden Sie JavaScript zu Parse Time

2009-12-06T17:10:00 

Mit anderen Worten, mit der Zeichenfolge oben, würde ich ausgeben möchte:

5:10 PM 

Jede Führung/Tutorials dazu wären toll.

+1

Ich wollte es nicht als ein Duplikat dieser Frage schließen: '( – Ryan

+0

Ich stimme nicht zu, dass dies eine genaue Kopie der Frage ist. Das Analysieren von ISO-Zeitstempeln ist ein anderes Anliegen als menschliche Eingaben zu analysieren. – Andrew

Antwort

0

string.slice(11,16) wird 17:10 zurückgeben. Von dort aus (möglicherweise mit slice in interessanter und aufregenden Manieren) sollte es ziemlich einfach sein, es in 24-Stunden-Format zu bekommen.

0

Dieses Format wird ISO 8601 genannt. Mochikit kommt mit einer Funktion, die sie zu analysieren,

http://mochikit.com/doc/html/MochiKit/DateTime.html

Sie können ein Date-Objekt wie diese erhalten,

timestamp = isoTimestamp("2009-12-06T17:10:00"); 

Kopieren Sie einfach die Funktion, wenn Sie nicht verwenden Mochikit wollen.

0

Das Analysieren des ISO-Zeitstempels ist einfach, Formatieren der Zeit in einer kulturell angemessenen Weise ist schwer (5:10 PM ist nicht für alle Gebietsschemas geeignet) Viele Toolkits bieten Routinen für den ISO-Teil, und es ist sogar Teil des neuen ECMAScript 5 Standard; nur ein paar tun den letzten Teil jedoch.

Sie können versuchen dojo.date.stamp.fromISOString und dojo.date.locale.format.

Ich glaube, Date-JS kann auch mal formatieren.

11

Chrome & Firefox: Standard-JavaScript-Datumskonstruktor dauert ISO 8601 Datumszeichenkette. Zum Beispiel:

var sampleDate = new Date("2010-03-07T02:13:46Z");

Returns dieses Date-Objekt: "Sun 7. März 2010 13.13.46 GMT + 1100 (AUS Eastern Daylight Time)"

Dies funktioniert nicht in IE (einschließlich der neuesten 9 IE)

Hier ist eine Cross-Browser-Lösung von Paul Sowden bei 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)); 
} 

Verbrauch:

var date = new Date(); 
date.setISO8601("2005-03-26T19:51:34Z"); 

Wenn Sie viele Datetime-Manipulation in JavaScript machen, kann ich auch vorschlagen, einige JS-Bibliotheken wie MomentJS zu überprüfen. Es behandelt einige gängige Dinge wie das Parsen von Daten, Formatieren und Berechnen der Differenz zwischen zwei Daten und unterstützt mehrere Lokalisierungen.