A resposta curta
Não há documentação "universal" que o javascript atenda; todo navegador que possui javascript é realmente uma implementação. No entanto, existe um padrão que a maioria dos navegadores modernos costuma seguir, e esse é o padrão EMCAScript; as seqüências padrão ECMAScript precisariam, no mínimo, de uma implementação modificada da definição da ISO 8601.
Além disso, há um segundo padrão estabelecido pela IETF que os navegadores também tendem a seguir, que é a definição de carimbos de data e hora feita no RFC 2822. A documentação real pode ser encontrada na lista de referências na parte inferior.
Com isso, você pode esperar funcionalidades básicas, mas o que "deveria" ser não é inerentemente o que "é". No entanto, vou me aprofundar um pouco nisso, pois parece que apenas três pessoas responderam à pergunta (Scott, goofballLogic e peller, a saber) que, para mim, sugere que a maioria das pessoas não sabe o que realmente acontece quando você crie um objeto Date.
A resposta longa
Onde está a documentação que lista os especificadores de formato suportados pelo objeto Date ()?
Para responder à pergunta, ou até mesmo procurar a resposta para essa pergunta, você precisa saber que o javascript não é uma linguagem nova; na verdade, é uma implementação do ECMAScript e segue os padrões do ECMAScript (mas observe, o javascript também na verdade antecede esses padrões; os padrões do EMCAScript são criados a partir da implementação inicial do LiveScript / JavaScript). O padrão atual do ECMAScript é 5.1 (2011); no momento em que a pergunta foi feita originalmente (junho de 2009), o padrão era 3 (4 foi abandonado), mas 5 foi lançado logo após o cargo no final de 2009. Isso deve descrever um problema; qual padrão uma implementação de javascript pode seguir, pode não refletir o que realmente está em vigor, porque a) é uma implementação de um determinado padrão; b) nem todas as implementações de um padrão são puritanas,
Essencialmente, ao lidar com javascript, você está lidando com um derivado (javascript específico para o navegador) de uma implementação (o próprio javascript). A V8 do Google, por exemplo, implementa o ECMAScript 5.0, mas o JScript do Internet Explorer não tenta se adaptar a nenhum padrão do ECMAScript, mas o Internet Explorer 9 está em conformidade com o ECMAScript 5.0.
Quando um único argumento é passado para o novo Date (), ele lança esse protótipo de função:
new Date(value)
Quando dois ou mais argumentos são passados para o novo Date (), ele lança esse protótipo de função:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
Ambas as funções devem parecer familiares, mas isso não responde imediatamente à sua pergunta e o que quantifica como um "formato de data" aceitável requer mais explicações. Quando você passa uma string para o novo Date (), ele chama o protótipo (observe que estou usando a palavra protótipo livremente; as versões podem ser funções individuais ou podem fazer parte de uma instrução condicional em uma única função) para nova data (valor) com sua string como argumento para o parâmetro "value". Esta função primeiro verifica se é um número ou uma string. A documentação para esta função pode ser encontrada aqui:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
A partir disso, podemos deduzir que, para obter a formatação de string permitida para a nova data (valor), precisamos examinar o método Date.parse (string). A documentação para este método pode ser encontrada aqui:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
E podemos inferir ainda mais que as datas devem estar em um formato estendido ISO 8601 modificado, conforme especificado aqui:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
No entanto, podemos reconhecer por experiência que o objeto Date do javascript aceita outros formatos (imposto pela existência dessa pergunta em primeiro lugar), e isso é bom porque o ECMAScript permite a implementação de formatos específicos. No entanto, isso ainda não responde à pergunta de qual documentação está disponível nos formatos disponíveis, nem de quais formatos são realmente permitidos. Vamos dar uma olhada na implementação javascript do Google, V8; observe que não estou sugerindo que este é o melhor mecanismo javascript (como definir "melhor" ou até "bom") e não se pode presumir que os formatos permitidos na V8 representam todos os formatos disponíveis hoje, mas acho justo assumir que eles seguem as expectativas modernas.
V8 do Google, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
Observando a função DateConstructor, podemos deduzir que precisamos encontrar a função DateParse; no entanto, observe que "ano" não é o ano real e é apenas uma referência ao parâmetro "ano".
V8 do Google, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
Isso chama% DateParseString, que na verdade é uma referência de função de tempo de execução para uma função C ++. Refere-se ao seguinte código:
V8 do Google, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
A chamada de função com a qual estamos preocupados nessa função é para DateParser :: Parse (); Se você ignorar a lógica em torno dessas chamadas de função, essas são apenas verificações para se adequar ao tipo de codificação (ASCII e UC16). DateParser :: Parse é definido aqui:
V8 do Google, dateparser-inl.h, DateParser :: Parse
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Essa é a função que realmente define quais formatos ele aceita. Essencialmente, ele verifica o padrão EMCAScript 5.0 ISO 8601 e, se não for compatível com os padrões, tentará criar a data com base nos formatos herdados. Alguns pontos-chave com base nos comentários:
- Palavras antes do primeiro número que são desconhecidas para o analisador são ignoradas.
- O texto entre parênteses é ignorado.
- Os números não assinados seguidos de ":" são interpretados como um "componente de tempo".
- Números não assinados seguidos de "." são interpretados como um "componente de tempo" e devem ser seguidos por milissegundos.
- Os números assinados seguidos pela hora ou hora minuto (por exemplo, +5: 15 ou +0515) são interpretados como o fuso horário.
- Ao declarar a hora e os minutos, você pode usar “hh: mm” ou “hhmm”.
- Palavras que indicam um fuso horário são interpretadas como um fuso horário.
- Todos os outros números são interpretados como "componentes da data".
- Todas as palavras que começam com os três primeiros dígitos de um mês são interpretadas como o mês.
- Você pode definir minutos e horas juntos em um dos dois formatos: "hh: mm" ou "hhmm".
- Símbolos como “+”, “-“ e incomparável “)” não são permitidos após o processamento de um número.
- Os itens que correspondem a vários formatos (por exemplo, 1970-01-01) são processados como uma sequência EMCAScript 5.0 ISO 8601 compatível com o padrão.
Portanto, isso deve ser suficiente para fornecer uma idéia básica do que esperar quando se trata de passar uma string para um objeto Date. Você pode expandir ainda mais isso observando a seguinte especificação que o Mozilla aponta na Mozilla Developer Network (compatível com os carimbos de data e hora da IETF RFC 2822):
http://tools.ietf.org/html/rfc2822#page-14
A Microsoft Developer Network menciona adicionalmente um padrão adicional para o objeto Date: ECMA-402, a Especificação da API de Internacionalização da ECMAScript, que é complementar ao padrão ECMAScript 5.1 (e futuros). Isso pode ser encontrado aqui:
http://www.ecma-international.org/ecma-402/1.0/
De qualquer forma, isso deve ajudar a destacar que não há "documentação" que represente universalmente todas as implementações de javascript, mas ainda há documentação suficiente disponível para compreender com precisão quais seqüências de caracteres são aceitáveis para um objeto Date. Quite a pergunta carregada quando você pensa sobre isso, sim? : P
Referências
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