Die kurze Antwort
Es gibt keine „universelle“ Dokumentation, für die Javascript geeignet ist. Jeder Browser mit Javascript ist wirklich eine Implementierung. Es gibt jedoch einen Standard, dem die meisten modernen Browser folgen, und das ist der EMCAScript-Standard. Die ECMAScript-Standardzeichenfolgen würden mindestens eine modifizierte Implementierung der ISO 8601-Definition erfordern.
Darüber hinaus gibt es einen zweiten von der IETF vorgegebenen Standard , dem auch Browser folgen. Dies ist die Definition für Zeitstempel, die im RFC 2822 erstellt wurden. Die aktuelle Dokumentation finden Sie in der Referenzliste unten.
Von diesem können Sie grundlegende Funktionen erwarten, aber was "sein sollte", ist nicht von Natur aus das, was "ist". Ich werde mich jedoch ein wenig eingehend mit diesem Verfahren befassen, da anscheinend nur drei Personen tatsächlich die Frage beantwortet haben (Scott, goofballLogic und peller), was für mich darauf hindeutet, dass die meisten Menschen nicht wissen, was tatsächlich passiert, wenn Sie Erstellen Sie ein Datumsobjekt.
Die lange Antwort
Wo befindet sich die Dokumentation, in der die vom Date () - Objekt unterstützten Formatbezeichner aufgeführt sind?
Um die Frage zu beantworten oder normalerweise sogar nach der Antwort auf diese Frage zu suchen, müssen Sie wissen, dass Javascript keine neuartige Sprache ist. Es handelt sich tatsächlich um eine Implementierung von ECMAScript und folgt den ECMAScript-Standards (beachten Sie jedoch, dass Javascript diese Standards auch tatsächlich vorweggenommen hat; EMCAScript-Standards basieren auf der frühen Implementierung von LiveScript / JavaScript). Der aktuelle ECMAScript-Standard ist 5.1 (2011); Zu dem Zeitpunkt, als die Frage ursprünglich gestellt wurde (Juni '09), war der Standard 3 (4 wurde aufgegeben), aber 5 wurde kurz nach dem Post Ende 2009 veröffentlicht. Dies sollte ein Problem umreißen; Welchem Standard eine Javascript-Implementierung folgen kann, spiegelt möglicherweise nicht wider, was tatsächlich vorhanden ist, da a) es sich um eine Implementierung eines bestimmten Standards handelt, b) nicht alle Implementierungen eines Standards puritanisch sind,
Im Wesentlichen handelt es sich beim Umgang mit Javascript um ein Derivat (für den Browser spezifisches Javascript) einer Implementierung (Javascript selbst). Google V8 implementiert beispielsweise ECMAScript 5.0, aber JScript von Internet Explorer versucht nicht, einem ECMAScript-Standard zu entsprechen, Internet Explorer 9 entspricht jedoch ECMAScript 5.0.
Wenn ein einzelnes Argument an new Date () übergeben wird, wird dieser Funktionsprototyp umgewandelt:
new Date(value)
Wenn zwei oder mehr Argumente an new Date () übergeben werden, wird dieser Funktionsprototyp umgewandelt:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
Beide Funktionen sollten vertraut aussehen, aber dies beantwortet Ihre Frage nicht sofort und was als akzeptables „Datumsformat“ quantifiziert wird, bedarf weiterer Erläuterungen. Wenn Sie eine Zeichenfolge an new Date () übergeben, wird der Prototyp aufgerufen (beachten Sie, dass ich das Wort Prototyp lose verwende; die Versionen können einzelne Funktionen sein oder Teil einer bedingten Anweisung in einer einzelnen Funktion) für neues Datum (Wert) mit Ihrer Zeichenfolge als Argument für den Parameter "Wert". Diese Funktion prüft zunächst, ob es sich um eine Zahl oder eine Zeichenfolge handelt. Die Dokumentation zu dieser Funktion finden Sie hier:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
Daraus können wir schließen, dass wir uns die Methode Date.parse (Zeichenfolge) ansehen müssen, um die für neues Datum (Wert) zulässige Zeichenfolgenformatierung zu erhalten. Die Dokumentation zu dieser Methode finden Sie hier:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
Und wir können weiter schließen, dass die Daten voraussichtlich in einem modifizierten erweiterten ISO 8601-Format vorliegen, wie hier angegeben:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
Aus Erfahrung können wir jedoch erkennen, dass das Date-Objekt von Javascript andere Formate akzeptiert (was durch das Vorhandensein dieser Frage in erster Linie erzwungen wird), und dies ist in Ordnung, da ECMAScript implementierungsspezifische Formate zulässt. Dies beantwortet jedoch immer noch nicht die Frage, welche Dokumentation zu den verfügbaren Formaten verfügbar ist und welche Formate tatsächlich zulässig sind. Wir werden uns die Javascript-Implementierung von Google, V8, ansehen. Bitte beachten Sie, dass ich nicht vorschlage, dass dies die "beste" Javascript-Engine ist (wie kann man "beste" oder sogar "gut" definieren) und man nicht davon ausgehen kann, dass die in V8 zulässigen Formate alle heute verfügbaren Formate darstellen, aber ich denke, dass dies fair ist anzunehmen, dass sie den modernen Erwartungen folgen.
Googles V8, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
Wenn wir uns die DateConstructor-Funktion ansehen, können wir ableiten, dass wir die DateParse-Funktion finden müssen. Beachten Sie jedoch, dass „Jahr“ nicht das tatsächliche Jahr ist und nur auf den Parameter „Jahr“ verweist.
Googles V8, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
Dies ruft% DateParseString auf, was eigentlich eine Laufzeitfunktionsreferenz für eine C ++ - Funktion ist. Es bezieht sich auf den folgenden Code:
Googles V8, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
Der Funktionsaufruf, mit dem wir uns in dieser Funktion befassen, ist für DateParser :: Parse (); Ignorieren Sie die Logik, die diese Funktionsaufrufe umgibt. Dies sind lediglich Überprüfungen, um dem Codierungstyp (ASCII und UC16) zu entsprechen. DateParser :: Parse ist hier definiert:
Googles V8, dateparser-inl.h, DateParser :: Parse
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Dies ist die Funktion, die tatsächlich definiert, welche Formate akzeptiert werden. Im Wesentlichen wird nach dem EMCAScript 5.0 ISO 8601-Standard gesucht. Wenn dieser nicht den Standards entspricht, wird versucht, das Datum auf der Grundlage älterer Formate zu erstellen. Einige wichtige Punkte basierend auf den Kommentaren:
- Wörter vor der ersten Nummer, die dem Parser unbekannt sind, werden ignoriert.
- Text in Klammern wird ignoriert.
- Vorzeichenlose Zahlen gefolgt von „:“ werden als „Zeitkomponente“ interpretiert.
- Vorzeichenlose Nummern gefolgt von "." werden als „Zeitkomponente“ interpretiert und müssen von Millisekunden gefolgt werden.
- Vorzeichenbehaftete Zahlen, gefolgt von Stunde oder Stunde Minute (z. B. +5: 15 oder +0515), werden als Zeitzone interpretiert.
- Bei der Angabe von Stunde und Minute können Sie entweder "hh: mm" oder "hhmm" verwenden.
- Wörter, die eine Zeitzone angeben, werden als Zeitzone interpretiert.
- Alle anderen Zahlen werden als „Datumskomponenten“ interpretiert.
- Alle Wörter, die mit den ersten drei Ziffern eines Monats beginnen, werden als Monat interpretiert.
- Sie können Minuten und Stunden zusammen in einem der beiden Formate definieren: "hh: mm" oder "hhmm".
- Symbole wie "+", "-" und nicht übereinstimmend ")" sind nach der Verarbeitung einer Nummer nicht mehr zulässig.
- Elemente, die mehreren Formaten entsprechen (z. B. 1970-01-01), werden als standardkonforme EMCAScript 5.0 ISO 8601-Zeichenfolge verarbeitet.
Dies sollte also ausreichen, um Ihnen eine grundlegende Vorstellung davon zu geben, was Sie erwartet, wenn Sie eine Zeichenfolge an ein Date-Objekt übergeben. Sie können dies weiter ausbauen, indem Sie sich die folgende Spezifikation ansehen, auf die Mozilla im Mozilla Developer Network verweist (gemäß den IETF RFC 2822-Zeitstempeln):
http://tools.ietf.org/html/rfc2822#page-14
Das Microsoft Developer Network erwähnt zusätzlich einen zusätzlichen Standard für das Date-Objekt: ECMA-402, die ECMAScript Internationalization API-Spezifikation, die den ECMAScript 5.1-Standard (und zukünftige) ergänzt. Das finden Sie hier:
http://www.ecma-international.org/ecma-402/1.0/
In jedem Fall sollte dies dazu beitragen, hervorzuheben, dass es keine "Dokumentation" gibt, die universell alle Implementierungen von Javascript darstellt, aber dennoch genügend Dokumentation verfügbar ist, um einen vernünftigen Eindruck davon zu bekommen, welche Zeichenfolgen für ein Date-Objekt akzeptabel sind. Ziemlich die geladene Frage, wenn Sie darüber nachdenken, ja? : P.
Verweise
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
http://tools.ietf.org/html/rfc2822#page-14
http://www.ecma-international.org/ecma-402/1.0/
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Ressourcen
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx