Validar datas é uma parte essencial ao trabalhar com JavaScript, especialmente ao lidar com formulários e entradas de usuários. Garantir que uma data inserida seja válida e bem formatada evita muitos erros e problemas no fluxo da aplicação. Vamos explorar como validar datas em JavaScript.

1. Usando Date() nativo do JavaScript

O objeto Date é a principal ferramenta no JavaScript para lidar com datas. Veja um exemplo básico de validação:

function isValidDate(dateString) {
    const date = new Date(dateString);
    return date instanceof Date && !isNaN(date);
}
  • O código acima cria um novo objeto Date a partir de uma string e verifica se o resultado é uma data válida.

  • O método isNaN() ajuda a identificar se a conversão falhou, o que indica uma data inválida.

2. Verificando formato da data

A função Date() aceita várias formas de strings, mas é importante garantir que o formato seja o esperado. Você pode usar expressões regulares (RegEx) para verificar se a entrada está no formato correto:

function isValidDateFormat(dateString) {
    // Verifica formato AAAA-MM-DD
    const regex = /^\d{4}-\d{2}-\d{2}$/;
    return regex.test(dateString);
}

Esse exemplo verifica se a data segue o padrão AAAA-MM-DD, comum em muitas APIs e sistemas. Você pode ajustar o RegEx para outros formatos conforme necessário.

3. Usando bibliotecas de terceiros: Moment.js e Day.js

Validar e manipular datas com precisão pode ser complexo, especialmente em casos como fusos horários e diferentes formatos. Bibliotecas como Moment.js ou Day.js facilitam muito o trabalho:

Exemplo com Day.js:

const dayjs = require('dayjs'); // Se estiver usando Node.js ou importar via CDN em HTML

function isValidDateDayJS(dateString) {
    return dayjs(dateString, 'YYYY-MM-DD', true).isValid();
}
  • O Day.js permite não só validar a data, mas também garantir que o formato esteja correto.

  • Moment.js tem funcionalidades similares, mas o Day.js é mais leve e recomendado para novos projetos.

4. Validação de intervalo de datas

Muitas vezes, além de verificar se a data é válida, você precisa garantir que ela esteja dentro de um intervalo específico (por exemplo, não permitir datas futuras ou anteriores a um certo ano).

function isDateInRange(dateString, minDate, maxDate) {
    const date = new Date(dateString);
    const min = new Date(minDate);
    const max = new Date(maxDate);

    return date >= min && date <= max;
}

Essa função permite verificar se uma data está dentro de um intervalo especificado, como entre “2020-01-01” e “2023-12-31”.

Outro exemplo prático

 function validaData(stringData)
 {
    //VALIDA DATA NO FORMATO DD/MM/AAAA 
    
    var regExpCaracter = /[^\d]/;   //Expressão regular para procurar caracter não-numérico.
    var regExpEspaco = /^\s+|\s+$/g;  //Expressão regular para retirar espaços em branco.
    
    if(stringData.length != 10)
    {
        return false;
    }
    
    splitData = stringData.split('/');
    
    if(splitData.length != 3)
    {
        return false;
    }
    
    /* Retira os espaços em branco do início e fim de cada string. */
    splitData[0] = splitData[0].replace(regExpEspaco, '');
    splitData[1] = splitData[1].replace(regExpEspaco, '');
    splitData[2] = splitData[2].replace(regExpEspaco, '');
    
    if ((splitData[0].length != 2) || (splitData[1].length != 2) || 
        (splitData[2].length != 4))
    {
        return false;
    }
    
    /* Procura por caracter não-numérico. EX.: o "x" em "28/09/2x11" */
    if (regExpCaracter.test(splitData[0]) || regExpCaracter.test(splitData[1]) ||
        regExpCaracter.test(splitData[2]))
    {
        return false;
    }
    
    dia = parseInt(splitData[0],10);
    //O JavaScript representa o mês de 0 a 11 (0->janeiro, 1->fevereiro... 11->dezembro)
    mes = parseInt(splitData[1],10)-1; 
    ano = parseInt(splitData[2],10);
    
    var novaData = new Date(ano, mes, dia);
    
	/* O JavaScript aceita criar datas com, por exemplo, mês=14, porém a cada 12 meses mais um 
	ano é acrescentado a data final e o restante representa o mês. O mesmo ocorre para os dias, 
	sendo maior que o número de dias do mês em questão o JavaScript o converterá para meses/anos.
	Por exemplo, a data 28/14/2011 (que seria o comando "new Date(2011,13,28)", pois o mês é 
	representado de 0 a 11) o JavaScript converterá para 28/02/2012.
	Dessa forma, se o dia, mês ou ano da data resultante do comando "new Date()" for diferente 
	do dia, mês e ano da data que está sendo testada esta data é inválida. */
         
    if ((novaData.getDate() != dia) || (novaData.getMonth() != mes) || 
        (novaData.getFullYear() != ano))
    {
        return false;
    }
    else
    {
        return true;
    }
 }

Validar datas em JavaScript pode ser simples ou avançado, dependendo do que você precisa.

Para validações básicas, o objeto Date() e expressões regulares são suficientes. No entanto, para manipulação e validação de datas mais complexas, bibliotecas como Day.js ou Moment.js oferecem soluções mais completas.

QUER SER UM PROGRAMADOR FULL-STACK E DOMINAR AS PRINCIPAIS TECNOLOGIAS DO MERCADO?

Aprenda através de projetos reais e aulas práticas. São 20 cursos completos + cursos bônus. Grupos privados exclusivos, atualizações constantes e lives semanais.

Python, PHP, Java Script, CSS, Node, Angular JS, MySQL, Photoshop, Flutter, AWS, Apache e muito mais!

CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags:

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *