La réponse courte
Il n'y a pas de documentation «universelle» à laquelle javascript s'adresse; chaque navigateur qui a javascript est vraiment une implémentation. Cependant, il existe une norme que la plupart des navigateurs modernes ont tendance à suivre, et c'est la norme EMCAScript; les chaînes standard ECMAScript prendraient, au minimum, une implémentation modifiée de la définition ISO 8601.
En plus de cela, il y a une deuxième norme établie par l' IETF que les navigateurs ont tendance à suivre également, qui est la définition des horodatages faite dans la RFC 2822. La documentation réelle peut être trouvée dans la liste des références en bas.
De cela, vous pouvez vous attendre à des fonctionnalités de base, mais ce qui «devrait» ne pas être intrinsèquement ce qui «est». Je vais cependant approfondir cette procédure, car il semble que seules trois personnes ont répondu à la question (Scott, goofballLogic et Peller notamment), ce qui, pour moi, suggère que la plupart des gens ne savent pas ce qui se passe réellement lorsque vous créer un objet Date.
La réponse longue
Où est la documentation qui répertorie les spécificateurs de format pris en charge par l'objet Date ()?
Pour répondre à la question, ou même généralement chercher la réponse à cette question, vous devez savoir que javascript n'est pas une langue nouvelle; il s'agit en fait d'une implémentation d'ECMAScript et suit les normes ECMAScript (mais notez que javascript est également antérieur à ces normes; les normes EMCAScript sont construites à partir de l'implémentation précoce de LiveScript / JavaScript). La norme ECMAScript actuelle est 5.1 (2011); au moment où la question a été posée à l'origine (juin 2009), la norme était de 3 (4 ont été abandonnées), mais 5 a été publiée peu de temps après la publication à la fin de 2009. Cela devrait indiquer un problème; quelle norme une implémentation javascript peut suivre, peut ne pas refléter ce qui est réellement en place, car a) c'est une implémentation d'une norme donnée, b) toutes les implémentations d'une norme ne sont pas puritaines,
Essentiellement, lorsque vous traitez avec javascript, vous avez affaire à un dérivé (javascript spécifique au navigateur) d'une implémentation (javascript lui-même). Par exemple, le V8 de Google implémente ECMAScript 5.0, mais JScript d'Internet Explorer ne tente de se conformer à aucune norme ECMAScript, mais Internet Explorer 9 est conforme à ECMAScript 5.0.
Lorsqu'un seul argument est passé à new Date (), il convertit ce prototype de fonction:
new Date(value)
Lorsque deux ou plusieurs arguments sont passés à new Date (), il convertit ce prototype de fonction:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
Ces deux fonctions devraient vous sembler familières, mais cela ne répond pas immédiatement à votre question et ce qui quantifie comme un «format de date» acceptable nécessite des explications supplémentaires. Lorsque vous passez une chaîne à new Date (), il appellera le prototype (notez que j'utilise le mot prototype de façon lâche; les versions peuvent être des fonctions individuelles ou faire partie d'une instruction conditionnelle dans une seule fonction) pour new Date (valeur) avec votre chaîne comme argument pour le paramètre «value». Cette fonction vérifiera d'abord s'il s'agit d'un nombre ou d'une chaîne. La documentation de cette fonction se trouve ici:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
De cela, nous pouvons déduire que pour obtenir le formatage de chaîne autorisé pour la nouvelle date (valeur), nous devons examiner la méthode Date.parse (chaîne). La documentation de cette méthode se trouve ici:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
Et nous pouvons en déduire que les dates devraient être dans un format étendu ISO 8601 modifié, comme spécifié ici:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
Cependant, nous pouvons reconnaître par expérience que l'objet Date de javascript accepte d'autres formats (imposé par l'existence de cette question en premier lieu), et cela ne pose pas de problème car ECMAScript permet la mise en œuvre de formats spécifiques. Cependant, cela ne répond toujours pas à la question de savoir quelle documentation est disponible sur les formats disponibles, ni quels formats sont réellement autorisés. Nous allons examiner l'implémentation javascript de Google, V8; veuillez noter que je ne suggère pas que ce soit le "meilleur" moteur javascript (comment peut-on définir "meilleur" ou même "bon") et on ne peut pas supposer que les formats autorisés dans V8 représentent tous les formats disponibles aujourd'hui, mais je pense que c'est juste à supposer qu'ils suivent les attentes modernes.
Google V8, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
En regardant la fonction DateConstructor, nous pouvons déduire que nous devons trouver la fonction DateParse; cependant, notez que «année» n'est pas l'année réelle et n'est qu'une référence au paramètre «année».
Google V8, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
Cela appelle% DateParseString, qui est en fait une référence de fonction d'exécution pour une fonction C ++. Il fait référence au code suivant:
Google V8, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
L'appel de fonction qui nous intéresse dans cette fonction est pour DateParser :: Parse (); ignorer la logique entourant ces appels de fonction, ce ne sont que des vérifications pour se conformer au type de codage (ASCII et UC16). DateParser :: Parse est défini ici:
Google V8, dateparser-inl.h, DateParser :: Parse
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
C'est la fonction qui définit réellement les formats qu'elle accepte. Essentiellement, il vérifie la norme EMCAScript 5.0 ISO 8601 et s'il n'est pas conforme aux normes, il tentera de construire la date en fonction des formats hérités. Quelques points clés sur la base des commentaires:
- Les mots avant le premier nombre inconnus de l'analyseur sont ignorés.
- Le texte entre parenthèses est ignoré.
- Les nombres non signés suivis de «:» sont interprétés comme une «composante temporelle».
- Chiffres non signés suivis de "." sont interprétés comme une «composante temporelle» et doivent être suivis de millisecondes.
- Les nombres signés suivis de l'heure ou des minutes (par exemple +5: 15 ou +0515) sont interprétés comme le fuseau horaire.
- Lors de la déclaration des heures et des minutes, vous pouvez utiliser «hh: mm» ou «hhmm».
- Les mots qui indiquent un fuseau horaire sont interprétés comme un fuseau horaire.
- Tous les autres nombres sont interprétés comme des «composants de date».
- Tous les mots commençant par les trois premiers chiffres d'un mois sont interprétés comme le mois.
- Vous pouvez définir les minutes et les heures ensemble dans l'un des deux formats: «hh: mm» ou «hhmm».
- Les symboles comme "+", "-" et sans correspondance ")" ne sont pas autorisés après le traitement d'un numéro.
- Les éléments qui correspondent à plusieurs formats (par exemple, le 01/01/1970) sont traités comme une chaîne conforme à la norme EMCAScript 5.0 ISO 8601.
Cela devrait donc être suffisant pour vous donner une idée de base de ce à quoi vous attendre quand il s'agit de passer une chaîne dans un objet Date. Vous pouvez développer cela en consultant les spécifications suivantes que Mozilla pointe sur le réseau de développeurs Mozilla (conformes aux horodatages IETF RFC 2822):
http://tools.ietf.org/html/rfc2822#page-14
Le Microsoft Developer Network mentionne en outre une norme supplémentaire pour l'objet Date: ECMA-402, la spécification ECMAScript Internationalization API, qui complète la norme ECMAScript 5.1 (et les futures). Cela peut être trouvé ici:
http://www.ecma-international.org/ecma-402/1.0/
Dans tous les cas, cela devrait aider à souligner qu'il n'y a pas de "documentation" qui représente universellement toutes les implémentations de javascript, mais il y a encore suffisamment de documentation disponible pour donner un sens raisonnable aux chaînes acceptables pour un objet Date. Une question assez chargée quand on y pense, oui? : P
Références
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
Ressources
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