La respuesta corta
No hay documentación "universal" a la que se dirige JavaScript; cada navegador que tiene javascript es realmente una implementación. Sin embargo, existe un estándar que la mayoría de los navegadores modernos tienden a seguir, y ese es el estándar EMCAScript; Las cadenas estándar ECMAScript tomarían, como mínimo, una implementación modificada de la definición ISO 8601.
Además de esto, hay un segundo estándar establecido por el IETF que los navegadores tienden a seguir también, que es la definición de las marcas de tiempo hechas en el RFC 2822. La documentación real se puede encontrar en la lista de referencias en la parte inferior.
De esto puede esperar una funcionalidad básica, pero lo que "debería" ser no es inherentemente lo que "es". Sin embargo, voy a profundizar un poco en este procedimiento, ya que parece que solo tres personas respondieron la pregunta (Scott, goofballLogic y Peller, a saber), lo que, para mí, sugiere que la mayoría de las personas desconocen lo que realmente sucede cuando crear un objeto de fecha.
La larga respuesta
¿Dónde está la documentación que enumera los especificadores de formato compatibles con el objeto Date ()?
Para responder a la pregunta, o generalmente incluso buscar la respuesta a esta pregunta, debe saber que JavaScript no es un lenguaje novedoso; en realidad es una implementación de ECMAScript y sigue los estándares de ECMAScript (pero tenga en cuenta que javascript también es anterior a esos estándares; los estándares de EMCAScript se basan en la implementación temprana de LiveScript / JavaScript). El estándar actual de ECMAScript es 5.1 (2011); en el momento en que se hizo la pregunta originalmente (junio de 2009), el estándar era 3 (4 se abandonó), pero 5 se lanzó poco después de la publicación a fines de 2009. Esto debería describir un problema; qué estándar puede seguir una implementación de JavaScript, puede no reflejar lo que realmente está en su lugar, porque a) es una implementación de un estándar dado, b) no todas las implementaciones de un estándar son puritanas,
Esencialmente, cuando se trata de javascript, se trata de un derivado (javascript específico para el navegador) de una implementación (javascript en sí). El V8 de Google, por ejemplo, implementa ECMAScript 5.0, pero el JScript de Internet Explorer no intenta cumplir con ningún estándar de ECMAScript, pero Internet Explorer 9 sí lo hace con ECMAScript 5.0.
Cuando se pasa un único argumento a la nueva Fecha (), lanza este prototipo de función:
new Date(value)
Cuando se pasan dos o más argumentos a la nueva Fecha (), lanza este prototipo de función:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
Ambas funciones deberían parecer familiares, pero esto no responde de inmediato a su pregunta y lo que cuantifica como un "formato de fecha" aceptable requiere una explicación más detallada. Cuando pasa una cadena a la nueva Fecha (), llamará al prototipo (tenga en cuenta que estoy usando la palabra prototipo libremente; las versiones pueden ser funciones individuales o puede ser parte de una declaración condicional en una sola función) para nueva Fecha (valor) con su cadena como argumento para el parámetro "valor". Esta función primero verificará si es un número o una cadena. La documentación para esta función se puede encontrar aquí:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
A partir de esto, podemos deducir que para obtener el formato de cadena permitido para la nueva Fecha (valor), tenemos que mirar el método Date.parse (cadena). La documentación para este método se puede encontrar aquí:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
Y podemos inferir además que se espera que las fechas estén en un formato extendido ISO 8601 modificado, como se especifica aquí:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
Sin embargo, podemos reconocer por experiencia que el objeto Date de javascript acepta otros formatos (impuestos por la existencia de esta pregunta en primer lugar), y esto está bien porque ECMAScript permite formatos específicos de implementación. Sin embargo, eso aún no responde a la pregunta de qué documentación está disponible en los formatos disponibles, ni qué formatos están realmente permitidos. Vamos a ver la implementación de JavaScript de Google, V8; tenga en cuenta que no estoy sugiriendo que este sea el "mejor" motor de JavaScript (¿cómo se puede definir "mejor" o incluso "bueno") y no se puede suponer que los formatos permitidos en V8 representan todos los formatos disponibles en la actualidad, pero creo que es justo asumir que sí siguen las expectativas modernas.
Google V8, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
Al observar la función DateConstructor, podemos deducir que necesitamos encontrar la función DateParse; sin embargo, tenga en cuenta que "año" no es el año real y es solo una referencia al parámetro "año".
Google V8, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
Esto llama a% DateParseString, que en realidad es una referencia de función de tiempo de ejecución para una función de C ++. Se refiere al siguiente código:
Google V8, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
La llamada a la función que nos interesa en esta función es para DateParser :: Parse (); ignore la lógica que rodea esas llamadas de función, estas son solo verificaciones para cumplir con el tipo de codificación (ASCII y UC16). DateParser :: Parse se define aquí:
Google V8, dateparser-inl.h, DateParser :: Parse
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Esta es la función que realmente define qué formatos acepta. Esencialmente, verifica el estándar EMCAScript 5.0 ISO 8601 y, si no cumple con los estándares, intentará construir la fecha en función de los formatos heredados. Algunos puntos clave basados en los comentarios:
- Se ignoran las palabras anteriores al primer número que el analizador desconoce.
- El texto entre paréntesis se ignora.
- Los números sin signo seguidos de ":" se interpretan como un "componente de tiempo".
- Números sin signo seguidos de "." se interpretan como un "componente de tiempo" y deben ser seguidos por milisegundos.
- Los números firmados seguidos de la hora o la hora minuto (por ejemplo, +5: 15 o +0515) se interpretan como la zona horaria.
- Al declarar la hora y los minutos, puede usar “hh: mm” o “hhmm”.
- Las palabras que indican una zona horaria se interpretan como una zona horaria.
- Todos los demás números se interpretan como "componentes de fecha".
- Todas las palabras que comienzan con los primeros tres dígitos de un mes se interpretan como el mes.
- Puede definir minutos y horas juntos en cualquiera de los dos formatos: "hh: mm" o "hhmm".
- Símbolos como "+", "-" y "no coincidentes") "no están permitidos después de que se haya procesado un número.
- Los elementos que coinciden con varios formatos (por ejemplo, 1970-01-01) se procesan como una cadena EMCAScript 5.0 ISO 8601 que cumple con el estándar.
Entonces, esto debería ser suficiente para darle una idea básica de qué esperar cuando se trata de pasar una cadena a un objeto Date. Puede ampliar aún más esto mirando la siguiente especificación a la que apunta Mozilla en la red de desarrolladores de Mozilla (conforme a las marcas de tiempo IETF RFC 2822):
http://tools.ietf.org/html/rfc2822#page-14
La Red de desarrolladores de Microsoft menciona además un estándar adicional para el objeto Date: ECMA-402, la especificación de API de internacionalización ECMAScript, que es complementaria al estándar ECMAScript 5.1 (y los futuros). Eso se puede encontrar aquí:
http://www.ecma-international.org/ecma-402/1.0/
En cualquier caso, esto debería ayudar a destacar que no existe una "documentación" que represente universalmente todas las implementaciones de javascript, pero todavía hay suficiente documentación disponible para tener un sentido razonable de qué cadenas son aceptables para un objeto Date. Toda la pregunta cargada cuando lo piensas, ¿sí? :PAGS
Referencias
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
Recursos
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