JavaScript: Welche Browser unterstützen das Parsen von ISO-8601 Date String mit Date.parse
Ich Fehler beim Parsen ein ISO-8601-Datum "2011-04-26T13:16:50Z" auf IE8 und Safari 5, aber es funktionierte auf Chrome 10, FF4. Die Unterstützung scheint zu sein, ziemlich gemischt?
Kennt jemand den aktuellen status, die Browser Parsen können dieses format? Ich nehme an, IE6 und 7 fehl auch.
var d = Date.parse("2011-04-26T13:16:50Z");
Kommentar zu dem Problem
Wahrscheinlich können wir diese Figur ein, weil ECMAScript-262v5 Unterstützung wird nicht veröffentlicht. Nützliche links: Mozilla Docs, W3 datetime
InformationsquelleAutor der Frage cat | 2011-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte dieses Problem heute. Ich fand momentjs war eine gute Möglichkeit, das Parsen von ISO-8601-Datumsangaben in einer cross-browser-manor.
momentjs kann auch verwendet werden, um die Ausgabe des Datum in einem anderen format.
InformationsquelleAutor der Antwort asgeo1
Ich sagen shim es nur, wenn nötig über ein paar tests,
hier, habe ich bereits geschrieben:
in seinem code nur verwenden Sie immer
Date.fromString(...)
stattnew Date(...)
test in einem browser zu sehen, ob der shim wird verwendet:
http://jsbin.com/efivib/1/edit
funktioniert in allen gängigen Browsern, verwendet diese Verweise:
http://dev.w3.org/html5/spec/common-microsyntaxes.html
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
http://msdn.microsoft.com/en-us/library/windows/apps/ff743760(v=vs. 94).aspx
http://msdn.microsoft.com/en-us/library/windows/apps/wz6stk2z(v=vs. 94).aspx
http://msdn.microsoft.com/en-us/library/windows/apps/k4w173wk(v=vs. 94).aspx
!- microsoft connect erfordert ein log-in zur Ansicht:
IE9 wurde nicht auf Millisekunden mit Ziffer zählt andere als 3: (behoben in IE10)
https://connect.microsoft.com/IE/feedback/details/723740/date-parse-and-new-date-fail-on-valid-formats
IE10 ist immer noch (1/17/2013) zu Versagen, wenn die Zeitzone weggelassen wird (nach ECMA, dies sollte defalt bis Z oder UTC, nicht Ortszeit):
https://connect.microsoft.com/IE/feedback/details/776783/date-parse-and-new-date-fail-on-valid-formats
-- Lesen Sie dies, wenn Sie sich kümmern, wo der standard ist jetzt /in die Zukunft gehen und warum kann ich nicht bekommen, das IE-team, zu erkennen, dass Ihre IE10 Umsetzung ist technisch falsch:
ECMAScript-262 v6.0 ist sich zu bewegen, die etwas mehr nach ISO8601-konforme version von "wenn es die Zeit zone Indikator weggelassen wird, übernehmen die local time"... so gibt es jetzt eine Diskrepanz, diese Umsetzung, chrome, mobile safari und opera Folgen alle ECMAScript-262 v5.1, in der Erwägung, dass IE10, firefox, desktop-safari alle zu sein scheinen nach dem mehr nach ISO8601-konformen ECMAScript-262 v6.0-Spezifikation... das ist verwirrend, gelinde gesagt. Wenn chrome oder mobile safari ziehen Sie den Auslöser und bewegen Sie den ES6 Umsetzung, ich denke, diese Umsetzung sollte mit ihm gehen verlassen ES5.1 in der Minderheit. Ich habe gelesen, dass diese im aufgeführt ist die "errata" in der version 5.1 aber ich habe es nicht gefunden. Ich bin eher der Meinung, dass es ein bisschen früh ist, ziehen Sie den Auslöser auf ES6 gerade noch, aber ich bin auch der Meinung, dass code muss praktisch, nicht ideal und zu bewegen, um, wo die browser-Macher bewegen. Das heißt, es scheint eine 50/50 Entscheidung, gerade jetzt, so unten ist der "future" version von diesem code...
Ich sollte auch erwähnen, dass eine der beiden Versionen wird der code normalisieren "nicht-konforme" Browser mit dem Verhalten des anderen, da es ist, was shims tun 😉
HIER IST EINE ANGEPASSTE VERSION KOMPATIBEL MIT der ECMAScript-262 v6.0 (JavaScript-Zukunft)
siehe entsprechende Abschnitte hier: (dies ist das einzige online-html-version die spec, die ich finden konnte) http://people.mozilla.org/~jorendorff/es6-Entwurf.html#sec-15.9.1.15
hoffe, das hilft -ck
InformationsquelleAutor der Antwort ckozl
Einfache Funktion zum analysieren nach ISO8601 Datumsformat in jedem browser:
InformationsquelleAutor der Antwort Alex Tsurika
Ja, Datum.analysieren ist nicht konsistent für die verschiedenen Browser. Sie könnten:
InformationsquelleAutor der Antwort Vik David
Einigen älteren Browsern Rückkehr der falsch Datum (und nicht NaN), wenn Sie analysieren eine ISO-konforme Datums-Zeichenfolge.
Verwenden Sie Ihre eigene Methode für alle Browser, oder verwenden Sie Datum.analysieren, wenn es richtig umgesetzt wird-
prüfen Sie eine bekannte timestamp.
InformationsquelleAutor der Antwort kennebec
Den ES5 Skillung weicht von der nach ISO8601 spec, vor allem, wenn es um die Behandlung von Daten ohne eine Zeitzone-Anzeige /offset. Es ist ein bug-ticket bei https://bugs.ecmascript.org/show_bug.cgi?id=112 die das problem beschreiben, und es sieht aus wie es wird behoben werden in ES6.
Für jetzt, ich empfehlen, sich auf https://github.com/csnover/js-iso8601 für eine cross-browser-Implementierung. Ich benutze https://github.com/csnover/js-iso8601/tree/lax, die nicht konform zu den ES5 spec, hat aber eine bessere Interoperabilität mit anderen JSON serialisieren Bibliotheken wie JSON.NET.
InformationsquelleAutor der Antwort Will Holley
Fand ich ckozl Antwort wirklich nützlich und interessant, aber der regexp ist nicht perfekt, und es funktionierte nicht in meinem Fall.
Abgesehen von der Tatsache, dass die Termine ohne Minuten, Sekunden oder milisecs werden nicht geparst, ISO 8501 spec sagt, dass die '-' und': '- Trennzeichen sind optional, also "2013-12-27" und "20131227" sind beide gültig. In meinem Fall ist das wichtig, weil ich bin einrichten des server-Datum und Zeit in eine JavaScript-variable von PHP:
Erzeugt der code so etwas wie dieses:
Wichtig ist nur die time zone designator "+0100" wo die ':' fehlt. Obwohl Firefox analysiert die Zeichenfolge korrekt, IE (11) fehlschlägt (wenn der ':' ist Hinzugefügt, dann wird IE auch funktioniert). Die Kopfschmerzen, über die zonetime und die ECMAScript-Spezifikationen beschrieben ckozl ist unwichtig in meinem Fall, da PHP immer den time zone designator.
Die RegExp, die ich verwende, statt dass man von ckozl ist:
Beachten Sie, dass diese regexp ist nicht perfekt. ISO 8501 ermöglicht Woche-Spezifikation (2007-W01-1 für Montag, 1 Jan 2007), oder Dezimalzahlen in Stunden und Minuten (18.50 18:30:00 oder 18:30.25 18:30:15). Aber Sie sind ziemlich ungewöhnlich.
P. D. Diese Antwort sollte ich mir vorstellen, einen Kommentar zu die original-chozl Antwort, aber ich habe nicht genug Ruf 🙁
InformationsquelleAutor der Antwort Googol
Wie schon zuvor erwähnt, ISO-8601-Stil Termine wurden Hinzugefügt, die in ECMAScript version 5, wo die Implementierung nicht konsistent ist, und nicht in allen Browsern verfügbar. Es gibt eine Anzahl von Skript stubs zur Verfügung, aber möchten Sie vielleicht fügen Sie einfach Ihr eigenes Datum.analysieren* die Methode.
Verwende ich die oben beschriebene Methode für JSON.analysieren Hydratation der Termine...
InformationsquelleAutor der Antwort Tracker1
ISO 8601 Datum-Formate wurden Hinzugefügt, ECMAScript-262 v5. Wenn also der browser ist nicht v5-kompatibel, Sie können einfach nicht erwarten werden in der Lage Umgang mit ISO-8601-Formate.
Browser nicht v5-kompatibel, kann eine allfällige Umsetzung bestimmtes Datum-Formate, die Sie wollen. Die meisten von Ihnen machen zumindest RFC822/RFC1123 Datum-Formate, aber. Beispiel:
InformationsquelleAutor der Antwort Jürgen Thelen
Microsoft Sharepoint 2013 ist AUCH die Verwendung einer anderen notation z.B. "2013-04-30T22:00:00Z"
Wenn Sie möchten, verwenden Sie die REST-Dienste von sharepoint 2013 im zusammenspiel mit Internet Explorer 8 ( IE8 ) , dann ist die Lösung von ckozl NICHT funktioniert.
Youll erhalten die NaN
änderung der regex-Zeile:
damit werden die Mikrosekunden bit optional !
cheerio, Leo
InformationsquelleAutor der Antwort leo