2010-03-19 10 views
13

Wie analysieren Sie derzeit ISO8601-Daten, z. 2010-02-23T23: 04: 48Z in JavaScript?Unterstützt Javascript/EcmaScript3 ISO8601 Datumsanalyse?

Einige Browser geben NaN (einschließlich Chrome) zurück, wenn Sie den folgenden Code verwenden, FF3.6 + funktioniert jedoch.

<html> 
<body> 
    <script type="text/javascript"> 
    var d = Date.parse("2010-02-23T23:04:48Z"); 
    document.write(d); 
</script> 
</body> 
</html> 

Sie können versuchen, diese hier http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_parse

Antwort

2

Auf die Frage im Titel: Nicht nativ (wie Sie getestet haben :))

In ECMA- 262 (3/e) die einzige Voraussetzung für Date.parse[15.9.4.2] ist die Round-Trip-Konvertierung über .toString() und .toUTCString() wird das Date-Objekt nicht ändern, dh

Date.parse(x.toString()) == Date.parse(x.toUTCString()) == x 

und beide .toString()[15.9.5.2] und .toUTCString()[15.9.5.42] sind abhängig von der Implementierung, so welches Format Date.parse kann analysieren, ist völlig nicht näher bezeichnet.

3

Wie andere erwähnt haben, ist es nicht in der 3. Ausgabe Spezifikation. Es ist jedoch in der 5. Ausgabe Spezifikation, und ich zitiere:

ECMAScript definiert ein String-Austauschformat für Datum-Zeiten auf der Grundlage einer Vereinfachung der ISO 8601 Extended Format. Das Format ist wie folgt: YYYY-MM-DDTHH: mm: ss.sssZ

So sollte es bald in Browsern rieselt werden (IE9, Chrome 1, Firefox 4 sind zumindest einige der Browser ISO unterstützt 8601 Daten). Wenn Sie eine Lösung in der Zwischenzeit implementieren wollen, möchten Sie vielleicht so optimieren, dass Ihr Skript Vorteil der nativen nehmen können, wenn verfügbar:

(function() 
{ 
    if (isNaN(Date.parse("2010-02-23T23:04:48Z"))) 
    { 
     var oldParse = Date.parse; 
     Date.parse = function (strTime) 
     { 
      // regex test strTime for ISO 8601, use oldParse if it isn't 
      // Use custom parser if it is. 
     } 
    } 
})(); 
Verwandte Themen