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: básico, estendido, ordinal e por semana
ISO 8601 não e um único formato — e uma família de representacoes para datas e horários. A forma famosa YYYY-MM-DD e so a ponta: o padrão também define a versão básica (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 semântica (existe 30 de fevereiro?) e uma checagem separada que envolve regras de ano bissexto e comprimento de mês.
Seis perfis que você vai encontrar
- RFC 3339 (timestamps de internet) —
YYYY-MM-DDTHH:MM:SS+HH:MM. Subconjunto estrito de ISO 8601 usado por JSON, OAuth, cabeçalhos 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. Saída padrão deDate.prototype.toISOString(). - Formato básico (sem separadores) —
YYYYMMDDTHHMMSS+HHMM. Usado em nomes de arquivo e EDI antigo. - Data ordinal —
YYYY-DDD, ex.:2024-300significa o dia 300 de 2024 (26 de outubro). Comum em aviacao e astronomia. - Data por semana —
YYYY-W##-D, ex.:2024-W45-3e a quarta-feira da semana ISO 45. Usado em varejo e folha de pagamento.
Um regex de validação 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 não pega
- 29 de fevereiro em ano bissexto — so vale se
ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0). Assim, 2000 sim, 1900 não, 2024 sim, 2100 não. - Dias por mês — 31 em jan/mar/mai/jul/ago/out/dez, 30 em abr/jun/set/nov, 28-29 em fevereiro.
- Hora 0-23 — a revisão ISO 8601:2019 acabou com o caso especial
24:00:00para meia-noite, que versões antigas permitiam. - Segundo bissexto —
23:59:60Zno último 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 lógica de calendário (semântica). Apps brasileiros ganham uma simplificacao: BRT e -03:00 o ano inteiro porque o Brasil aboliu o horário de verão em 2019.
Bibliotecas estritas vs o Date permissivo
O new Date(str) do JavaScript e propositalmente flexivel: chama Date.parse(), que aceita várias strings não-ISO ("March 15 2024", "2024/03/15") com comportamento dependente de implementação. Para entrada não confiável, use um parser estrito:
- Day.js —
dayjs(str, 'YYYY-MM-DDTHH:mm:ss', true), o terceiro argumento liga o modo estrito. - Luxon —
DateTime.fromISO(str, { setZone: true }).isValid. - date-fns —
parseISO(str)+isValid()para um parse so ISO. - Temporal API —
Temporal.PlainDate.from(str)lanca em entrada invalida; embrulhe num try/catch.
Formatos de exibição vs formatos de armazenamento
ISO 8601 e a escolha certa para armazenar e transportar — ordenavel como texto, sem locale, legível por máquina. Para exibir a humanos, use formato de locale: DD/MM/YYYY no Brasil, MM/DD/YYYY nos EUA, YYYY/MM/DD no Japão. 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 produção.
FAQ
O separador T e obrigatório? No RFC 3339, sim — data e hora devem ser unidas pelo literal T (ou, por pedido dos humanos, um espaço). O ISO 8601 puro permite espaço; a maioria das APIs rejeita.
Z e válido? 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 padrão 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 calendário precisa de função de calendário. Use uma biblioteca ou faca check por comprimento de mês.
ISO 8601 suporta datas antes de Cristo? Sim, com sinal opcional: -0001-01-01 e o ano 1 a.C. (calendário gregoriano proleptico). A maioria dos parsers não implementa.
Ferramentas Relacionadas
Validador de Data ISO 8601
Confere se uma string é uma data/hora ISO 8601 válida (incluindo timezone) e mostra os componentes detectados.
Validador ISO 8601 (Tempo, estrito)
Valide estritamente uma duração no formato ISO 8601 (como P1Y2M10DT2H30M). Útil para APIs, agendamentos, vídeos e qualquer campo que use o padrão de duração ISO.
Validador de Marco Temporal (ISO 8601)
Valida formatos ISO 8601 de timestamp completo: YYYY-MM-DDTHH:MM:SS[.fff]Z|±HH:MM. Detecta UTC, offsets e milissegundos.
Validador CPF + Data de Emissão (DDMMAAAA)
Valide o formato estendido de CPF com data (CPF + DDMMAAAA), usado em arquivos do governo. Confere apenas o padrão do número, sem o dígito verificador.
Validador de Passaporte Brasileiro
Valida o formato do passaporte brasileiro: 2 letras seguidas de 6 dígitos (ex: AB123456). Valida apenas o formato — não verifica autenticidade.
Calculadora de tempo de roteiro por formato padrão
Estima o tempo de exibição de um roteiro em formato padrão considerando uma página por minuto e ajuste por densidade de diálogo.