1001Ferramentas
📅Validadores

Validador de Data ISO/Padrão

Verifica se uma data está em formato ISO 8601 ou formatos comuns (YYYY-MM-DD, DD/MM/YYYY, MM/DD/YYYY). Detecta automaticamente o formato.

Variantes do formato ISO 8601: basico, estendido, ordinal e por semana

ISO 8601 nao e um unico formato — e uma familia de representacoes para datas e horarios. A forma famosa YYYY-MM-DD e so a ponta: o padrao tambem define a versao basica (sem separadores) e a estendida (com separadores), datas ordinais que contam o dia desde 1 de janeiro, datas por semana ancoradas na segunda-feira e date-time com fracoes de segundo e offset de fuso. Este validador foca nas variantes de formato: a forma textual exata que a string precisa ter para ser aceita por RFC 3339, W3CDTF, JSON Schema ou a futura Temporal API.

Uma checagem so de formato responde a uma pergunta: essa string esta sintaticamente correta? A validade semantica (existe 30 de fevereiro?) e uma checagem separada que envolve regras de ano bissexto e comprimento de mes.

Seis perfis que voce vai encontrar

  • RFC 3339 (timestamps de internet) — YYYY-MM-DDTHH:MM:SS+HH:MM. Subconjunto estrito de ISO 8601 usado por JSON, OAuth, cabecalhos HTTP de data.
  • W3CDTF (perfil web) — subconjunto ainda mais estreito do RFC 3339, adotado por Atom, RSS e sitemap.xml.
  • Formato estendido com milissegundos — YYYY-MM-DDTHH:MM:SS.sss+HH:MM. Saida padrao de Date.prototype.toISOString().
  • Formato basico (sem separadores) — YYYYMMDDTHHMMSS+HHMM. Usado em nomes de arquivo e EDI antigo.
  • Data ordinalYYYY-DDD, ex.: 2024-300 significa o dia 300 de 2024 (26 de outubro). Comum em aviacao e astronomia.
  • Data por semanaYYYY-W##-D, ex.: 2024-W45-3 e a quarta-feira da semana ISO 45. Usado em varejo e folha de pagamento.

Um regex de validacao hardcore

Um regex que cobre RFC 3339 e o formato estendido de uma vez:

/^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/

Ele aceita 2024-03-15, 2024-03-15T10:30:00, 2024-03-15T10:30:00.123Z, 2024-03-15T10:30:00-03:00. Rejeita 2024/03/15, 15-03-2024 e zeros a esquerda faltando. Para ordinal e por semana, precisa adicionar alternativas: \d{4}-\d{3} e \d{4}-W\d{2}-\d.

Casos limite semanticos que o regex nao pega

  • 29 de fevereiro em ano bissexto — so vale se ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0). Assim, 2000 sim, 1900 nao, 2024 sim, 2100 nao.
  • Dias por mes — 31 em jan/mar/mai/jul/ago/out/dez, 30 em abr/jun/set/nov, 28-29 em fevereiro.
  • Hora 0-23 — a revisao ISO 8601:2019 acabou com o caso especial 24:00:00 para meia-noite, que versoes antigas permitiam.
  • Segundo bissexto23:59:60Z no ultimo dia de junho ou dezembro e um leap second legal pelo IERS, mas a maioria dos parsers rejeita.
  • Timezone Z — equivale a +00:00 (UTC).

Um validador realmente estrito combina regex (formato) com logica de calendario (semantica). Apps brasileiros ganham uma simplificacao: BRT e -03:00 o ano inteiro porque o Brasil aboliu o horario de verao em 2019.

Bibliotecas estritas vs o Date permissivo

O new Date(str) do JavaScript e propositalmente flexivel: chama Date.parse(), que aceita varias strings nao-ISO ("March 15 2024", "2024/03/15") com comportamento dependente de implementacao. Para entrada nao confiavel, use um parser estrito:

  • Day.jsdayjs(str, 'YYYY-MM-DDTHH:mm:ss', true), o terceiro argumento liga o modo estrito.
  • LuxonDateTime.fromISO(str, { setZone: true }).isValid.
  • date-fnsparseISO(str) + isValid() para um parse so ISO.
  • Temporal APITemporal.PlainDate.from(str) lanca em entrada invalida; embrulhe num try/catch.

Formatos de exibicao vs formatos de armazenamento

ISO 8601 e a escolha certa para armazenar e transportar — ordenavel como texto, sem locale, legivel por maquina. Para exibir a humanos, use formato de locale: DD/MM/YYYY no Brasil, MM/DD/YYYY nos EUA, YYYY/MM/DD no Japao. A regra e universal: guarde ISO, renderize com Intl.DateTimeFormat ou sua lib de i18n. Misturar as duas coisas e a origem da maioria dos bugs de data em producao.

FAQ

O separador T e obrigatorio? No RFC 3339, sim — data e hora devem ser unidas pelo literal T (ou, por pedido dos humanos, um espaco). O ISO 8601 puro permite espaco; a maioria das APIs rejeita.

Z e valido? Sim — Z (Zulu) significa UTC e equivale a +00:00. RFC 3339 prefere por ser mais curto.

Data por semana e usada de verdade? Rara em APIs, mas padrao em varejo, folha de pagamento e calendarios ISO. 2024-W01-1 e a segunda-feira da primeira semana ISO de 2024 (que pode cair em dezembro de 2023).

Por que meu regex aceita 2024-02-30? Porque regex valida so formato. Validade de calendario precisa de funcao de calendario. Use uma biblioteca ou faca check por comprimento de mes.

ISO 8601 suporta datas antes de Cristo? Sim, com sinal opcional: -0001-01-01 e o ano 1 a.C. (calendario gregoriano proleptico). A maioria dos parsers nao implementa.

Ferramentas Relacionadas