La risposta breve
Non esiste una documentazione "universale" a cui si rivolge javascript; ogni browser che ha JavaScript è davvero un'implementazione. Tuttavia, esiste uno standard che la maggior parte dei browser moderni tende a seguire, e questo è lo standard EMCAScript; le stringhe standard ECMAScript richiederebbero, come minimo, un'implementazione modificata della definizione ISO 8601.
Oltre a ciò, esiste un secondo standard stabilito dall'IETF che i browser tendono a seguire, che è la definizione per i timestamp realizzati nella RFC 2822. La documentazione effettiva è disponibile nell'elenco dei riferimenti in fondo.
Da questo ci si può aspettare funzionalità di base, ma ciò che "dovrebbe" essere non è intrinsecamente ciò che "è". Ho intenzione di approfondire un po 'questa procedura proceduralmente, poiché sembra che solo tre persone abbiano effettivamente risposto alla domanda (Scott, goofballLogic e peller) che, per me, suggerisce che la maggior parte delle persone non sono consapevoli di ciò che accade realmente quando creare un oggetto Date.
La lunga risposta
Dov'è la documentazione che elenca gli identificatori di formato supportati dall'oggetto Date ()?
Per rispondere alla domanda, o in genere anche cercare la risposta a questa domanda, devi sapere che javascript non è un linguaggio inedito; è in realtà un'implementazione di ECMAScript e segue gli standard ECMAScript (ma nota, anche javascript ha effettivamente preceduto quegli standard; gli standard EMCAScript sono basati sull'implementazione anticipata di LiveScript / JavaScript). L'attuale standard ECMAScript è 5.1 (2011); al momento in cui la domanda era stata inizialmente posta (giugno '09), lo standard era 3 (4 è stato abbandonato), ma 5 è stato rilasciato poco dopo il post alla fine del 2009. Ciò dovrebbe evidenziare un problema; quale standard può seguire un'implementazione javascript, potrebbe non riflettere ciò che è effettivamente in atto, perché a) è un'implementazione di un determinato standard, b) non tutte le implementazioni di uno standard sono puritane,
In sostanza, quando si ha a che fare con javascript, si ha a che fare con una derivata (javascript specifica per il browser) di un'implementazione (javascript stesso). Google V8, ad esempio, implementa ECMAScript 5.0, ma JScript di Internet Explorer non tenta di conformarsi a nessuno standard ECMAScript, tuttavia Internet Explorer 9 è conforme a ECMAScript 5.0.
Quando un singolo argomento viene passato a new Date (), lancia questo prototipo di funzione:
new Date(value)
Quando due o più argomenti vengono passati alla nuova data (), viene lanciato questo prototipo di funzione:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
Entrambe queste funzioni dovrebbero sembrare familiari, ma ciò non risponde immediatamente alla tua domanda e ciò che si quantifica come un "formato data" accettabile richiede ulteriori spiegazioni. Quando passi una stringa a new Date (), chiamerà il prototipo (nota che sto usando vagamente la parola prototipo ; le versioni possono essere singole funzioni o possono far parte di un'istruzione condizionale in una singola funzione) per nuova data (valore) con la stringa come argomento per il parametro "valore". Questa funzione verificherà innanzitutto se si tratta di un numero o una stringa. La documentazione per questa funzione è disponibile qui:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
Da questo, possiamo dedurre che per ottenere la formattazione della stringa consentita per la nuova Data (valore), dobbiamo guardare al metodo Date.parse (stringa). La documentazione per questo metodo è disponibile qui:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
E possiamo ulteriormente dedurre che le date dovrebbero essere in un formato esteso ISO 8601 modificato, come specificato qui:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
Tuttavia, possiamo riconoscere per esperienza che l'oggetto Date di javascript accetta altri formati (imposto dall'esistenza di questa domanda in primo luogo), e questo va bene perché ECMAScript consente l'implementazione di formati specifici. Tuttavia, ciò non risponde ancora alla domanda su quale documentazione sia disponibile sui formati disponibili, né quali formati siano effettivamente consentiti. Vedremo l'implementazione javascript di Google, V8; si prega di notare che non sto suggerendo che questo sia il "migliore" motore javascript (come si può definire "migliore" o addirittura "buono") e non si può presumere che i formati consentiti in V8 rappresentino tutti i formati disponibili oggi, ma penso che sia giusto supporre che seguano le aspettative moderne.
V8 di Google, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
Osservando la funzione DateConstructor, possiamo dedurre che dobbiamo trovare la funzione DateParse; tuttavia, si noti che "anno" non è l'anno effettivo ed è solo un riferimento al parametro "anno".
V8 di Google, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
Ciò chiama% DateParseString, che in realtà è un riferimento di funzione di runtime per una funzione C ++. Si riferisce al seguente codice:
V8 di Google, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
La chiamata di funzione di cui ci occupiamo in questa funzione è per DateParser :: Parse (); ignora la logica che circonda quelle chiamate di funzione, questi sono solo controlli per conformarsi al tipo di codifica (ASCII e UC16). DateParser :: Parse è definito qui:
V8 di Google, dateparser-inl.h, DateParser :: Parse
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Questa è la funzione che definisce effettivamente quali formati accetta. In sostanza, verifica lo standard EMCAScript 5.0 ISO 8601 e se non è conforme agli standard, tenterà quindi di costruire la data in base a formati legacy. Alcuni punti chiave basati sui commenti:
- Le parole prima del primo numero sconosciute al parser vengono ignorate.
- Il testo tra parentesi viene ignorato.
- I numeri senza segno seguiti da “:” sono interpretati come “componenti temporali”.
- Numeri non firmati seguiti da "." sono interpretati come un "componente temporale" e devono essere seguiti da millisecondi.
- I numeri firmati seguiti dall'ora o dall'ora (ad esempio +5: 15 o +0515) vengono interpretati come fuso orario.
- Quando si dichiarano l'ora e i minuti, è possibile utilizzare “hh: mm” o “hhmm”.
- Le parole che indicano un fuso orario vengono interpretate come fuso orario.
- Tutti gli altri numeri vengono interpretati come "componenti data".
- Tutte le parole che iniziano con le prime tre cifre di un mese vengono interpretate come il mese.
- È possibile definire minuti e ore insieme in uno dei due formati: "hh: mm" o "hhmm".
- Simboli come "+", "-" e non corrispondente ")" non sono consentiti dopo l'elaborazione di un numero.
- Gli articoli che corrispondono a più formati (ad es. 1970-01-01) vengono elaborati come una stringa ISO 8601 conforme allo standard EMCAScript 5.0.
Quindi, questo dovrebbe essere sufficiente per darti un'idea di base su cosa aspettarti quando si tratta di passare una stringa in un oggetto Date. Puoi approfondire ulteriormente questo aspetto osservando le seguenti specifiche a cui Mozilla fa riferimento sulla Mozilla Developer Network (conforme ai timestamp IETF RFC 2822):
http://tools.ietf.org/html/rfc2822#page-14
Microsoft Developer Network menziona inoltre uno standard aggiuntivo per l'oggetto Date: ECMA-402, la specifica dell'API per l'internazionalizzazione di ECMAScript, complementare allo standard ECMAScript 5.1 (e quelli futuri). Questo può essere trovato qui:
http://www.ecma-international.org/ecma-402/1.0/
In ogni caso, ciò dovrebbe essere d'aiuto nell'evidenziare che non esiste una "documentazione" che rappresenti universalmente tutte le implementazioni di javascript, ma c'è ancora abbastanza documentazione disponibile per dare un ragionevole senso di quali stringhe sono accettabili per un oggetto Date. Piuttosto la domanda carica quando ci pensi, sì? : P
Riferimenti
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
risorse
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