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.
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:
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?
Sobre o Autor
0 Comentários