Também disponível em: English · Español · Français · العربية
Formato ISO 8601: analisador e validador
Cole qualquer cadeia ISO 8601 e veja o que ela significa, quais gramáticas a aceitam e o que o seu próprio navegador faz com ela.
O que é o formato ISO 8601?
O ISO 8601 é a norma internacional para escrever datas e horas de modo que elas ordenem corretamente, sejam lidas igual em qualquer país e não deixem ninguém em dúvida se 03/08 é março ou agosto. A escrita mais conhecida é a que quase todo mundo quer dizer com «o formato ISO 8601»: a data como 2026-08-03, a hora depois de um T e o deslocamento em relação ao UTC no final, dando 2026-08-03T12:00:00Z.
A norma é bem mais larga do que essa única escrita, e é daí que nasce quase toda a confusão. O ISO 8601 também define datas sem separadores, datas que dão o dia do ano em vez do mês, datas que numeram a semana em vez do dia, durações e intervalos entre dois pontos. Tudo isso é ISO 8601. Muito pouco software aceita tudo isso.
Então um validador que responde apenas «válido» ou «inválido» está respondendo a uma pergunta que não tem resposta única. Este dá três veredictos lado a lado — ISO 8601, RFC 3339 e o formato que o JavaScript define — porque uma cadeia pode ser impecável por um e ser recusada pelos outros dois, e saber qual é qual é o que realmente ajuda.
Como usar o analisador
- Cole a sua cadeia. Uma data, uma data com hora, uma duração começando por P ou um intervalo com uma barra no meio. Os botões de exemplo carregam um de cada, incluindo dois que a maioria dos analisadores recusa.
- Leia o que ela significa. A data resolvida, o instante em UTC e no seu próprio fuso horário, o deslocamento como está escrito, e a mesma data expressa como data ordinal e como data de semana, para você ver as outras escritas dela.
- Confira os três veredictos. Cada gramática diz se aceita a cadeia e, quando não aceita, exatamente qual regra foi quebrada. Embaixo, o seu próprio navegador tenta a mesma cadeia.
ISO 8601, RFC 3339 e JavaScript são três conjuntos diferentes
Estes três nomes são usados como sinônimos e não deveriam ser. Medimos os três contra as mesmas cadeias, e nenhum é subconjunto de outro: eles se sobrepõem.
O Date.parse do JavaScript aceita 2026 e 2026-08, um t e um z minúsculos, um espaço onde vai o T, e um deslocamento escrito +0200 sem dois-pontos. Ele recusa a forma básica 20260803, a data de semana 2026-W31-1, a data ordinal 2026-215 e — esta é a estranha — uma fração escrita com vírgula, que é justamente o separador que a gramática do próprio ISO 8601 lista primeiro. A biblioteca padrão do Python toma quase as decisões opostas: aceita notação básica, datas de semana e a vírgula, e recusa 2026-08, as minúsculas e a hora 24. Uma data ordinal é recusada pelos dois, e é ISO 8601 perfeitamente legal.
A RFC 3339, o perfil usado nos protocolos da internet, é a mais estrita das três e é uma gramática normativa, não uma descrição. Exige o T, exige que o deslocamento esteja presente e escrito por inteiro como ±HH:MM, e só admite o ponto antes de uma fração de segundo. Também permite algo em que os outros dois não tocam: um segundo bissexto, escrito :60. Assim 2016-12-31T23:59:60Z é um carimbo de tempo RFC 3339 válido que praticamente nenhuma biblioteca de datas consegue representar.
A norma que o JavaScript usa é honesta sobre o próprio alcance. A seção 21.4.1.32 da ECMA-262 descreve o seu formato como «uma simplificação do formato estendido de data de calendário do ISO 8601», de modo que datas de semana, datas ordinais e a notação básica ficam de fora por projeto, não por descuido. Tudo o que não corresponde é deixado, nas palavras da norma, à «heurística específica de cada implementação», e é por isso que a ferramenta roda Date.parse no seu navegador em vez de lhe contar o que os navegadores fazem.
Date.parse não valida datas
Esta é a armadilha que vale conhecer, e não é um defeito do navegador: ela decorre da norma. O formato do JavaScript dá o dia como «dois algarismos decimais de 01 a 31», sem referência alguma ao mês. Então 2026-02-30 é uma cadeia conforme, e os navegadores a interpretam e depois deixam o dia transbordar: você recebe 2 de março. Já 2026-13-01 devolve NaN, porque 13 está fora do intervalo declarado para um mês.
O resultado é que checar uma data perguntando se Date.parse devolve NaN aceita o dia 30 de fevereiro, o 31 de abril e o 29 de fevereiro num ano que não tem esse dia. Este analisador recusa todos, e é por isso que há um botão de exemplo com um deles: cole-o e a ferramenta dirá que o seu próprio navegador aceitou uma data impossível, e mostrará qual data ele inventou.
Há uma segunda surpresa, igualmente prevista, no mesmo terreno. A seção 21.4.3.2 da ECMA-262 afirma que, quando o deslocamento está ausente, as formas de só data são lidas como UTC e as de data com hora são lidas como hora local. Então 2026-08-03 é meia-noite UTC, enquanto 2026-08-03T00:00:00 é meia-noite onde você está — acrescentar uma hora a uma data desloca o instante pelo seu deslocamento inteiro, em silêncio, e a mesma cadeia significa momentos diferentes em máquinas diferentes. A ferramenta sinaliza isso sempre que a sua entrada não tem deslocamento.
As formas que quase nenhum programa viu
Uma data ordinal troca o mês e o dia pelo dia do ano: 2026-215 é o dia 215 de 2026, ou seja, 3 de agosto. Uma data de semana numera a semana: 2026-W31-1 é a segunda-feira da semana 31. A numeração de semanas tem uma regra que surpreende — uma semana pertence ao ano que contém a sua quinta-feira, então a primeira semana de um ano pode começar em dezembro. 2026-W01-1 é 29 de dezembro de 2025, e a ferramenta avisa quando os dois anos não coincidem.
A notação básica simplesmente tira os separadores, dando 20260803 e 20260803T120000Z. É a forma que aparece em nomes de arquivo, em exportações de dados antigas e nos blocos EXIF dentro das fotografias, e é a razão de um número solto de oito algarismos num arquivo de dados ser tantas vezes uma data.
Uma duração começa com P: P3Y6M4DT12H30M5S são três anos, seis meses, quatro dias, doze horas, trinta minutos e cinco segundos. A ferramenta soma uma delas em milissegundos, mas só quando consegue. Uma duração que use anos ou meses não tem comprimento fixo, porque quanto ela dura depende de quando começa, então não existe um número único honesto e a ferramenta diz isso em vez de escolher uma média. Um intervalo são duas dessas coisas separadas por uma barra, em qualquer de três combinações: dois instantes, um instante e uma duração, ou uma duração e um instante.
O que esta página não vai fingir que sabe
O ISO 8601 é vendido pela Organização Internacional de Normalização e não é de leitura livre. A gramática contra a qual esta ferramenta confere é a ABNF compilada publicada como Apêndice A da RFC 3339, que é o mais próximo de uma versão livre e citável — e que se desautoriza com bastante detalhe. Está marcada como informativa, foi montada a partir da edição de 1988, e abre dizendo que o ISO 8601 não define gramática formal alguma.
Em seguida ela lista quatro pontos em que a norma não é clara: se a notação básica e a estendida podem ser misturadas numa mesma cadeia, se a hora 24 só vale quando os minutos e os segundos são zero, se o T pode alguma vez ser omitido, e uma regra sobre a fração decimal em que a seção 5.3.1.3 e o Anexo B.2 da norma se contradizem abertamente. Os autores da RFC tiveram de decidir qual dos dois estava errado. Esse é o estado da arte de uma norma que todo mundo cita como se ela resolvesse tudo.
A hora 24 ilustra bem o quão pouco acordo existe. A ECMA-262 a permite e acrescenta uma nota dizendo que isso é coerente com o ISO 8601 «embora essa especificação a reserve para descrever intervalos de tempo e não a admita dentro da representação de um ponto único no tempo». O apêndice da RFC 3339 diz, ao contrário, que o ISO 8601 «não é claro» a respeito, e assume que a hora 24 vale em qualquer lugar. Dois documentos livres descrevendo a mesma norma paga, em desacordo sobre o que ela diz.
Por fim, o intervalo. As datas do JavaScript cobrem cerca de 273.790 anos para cada lado de 1970, e o último instante que se pode guardar é 13 de setembro de 275760. Qualquer coisa além disso é recusada aqui em vez de mostrada errada, porque a norma diz que tais cadeias devem devolver NaN sem recorrer a suposições.
Por que é grátis?
A análise acontece no seu navegador. Nada do que você cola é enviado, registrado ou guardado — fechar a aba é toda a exclusão necessária. Aqui isso importa mais que o normal, porque os carimbos de tempo que se precisa decifrar costumam sair de logs de produção e de relatórios de erro.
Sem conta, sem cadastro, sem limite de cadeias e sem marca d'água em nada que você copiar.