Validar período entre Datas com JavaScript | Dica
Pessoal hoje vou demonstrar como validar um período entre datas com JavaScript, a ideia é receber uma data do usuário e verificar se ela está dentro de um período aceito de dias.
Como exemplo imaginem um sistema de vendas onde temos que preencher a data de vencimento da primeira parcela de uma determinada compra, essa data não pode ultrapassar 30 dias da data atual. Temos que validar se a data da primeira parcela está dentro de um intervalo aceito, caso não esteja informar para o usuário esse erro.
Nosso HTML será bem simples, contendo apenas um campo para informar a data e um botão para disparar a função que vai validar se o período entre a data informada e período em dias é aceito, abaixo o HTML.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!DOCTYPE html> <html> <head> <title>Validar Período</title> </head> <body> <h1>Validar Período com JavaScript</h1> <input type="text" id="data" name="campo" placeholder="Informe a data (dd/mm/YYYY)" size="50"> <input type="button" value="Validar Período" id="botao"> <script type="text/javascript" src="custom.js"></script> </body> </html> |
Datas com JavaScript
Abaixo temos o script custom.js contendo a lógica JavaScript, basicamente nesse exemplo estou atribuindo ao evento click do botão a função verificaData(), essa função captura a data informada e junto com período que desejamos verificar “30 dias” passa como parâmetro para função isDataValida().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
/* Atribui ao evento click a função verificaData() */ var btn = document.getElementById('botao'); botao.addEventListener("click", verificaData); /* Captura a data e o período, chama a função isDataValida() e captura o retorno */ function verificaData(){ var data = document.getElementById('data').value; if (isDataValida(data, 30)){ alert('Passou'); }else{ alert('Não passou'); } } /* Valida se a data passada como parâmetro está dentro do período informado */ function isDataValida(data, periodo){ var arrayData = data.split('/'); var campoDia = parseInt(arrayData[]); var campoMes = parseInt(arrayData[1]); var campAno = parseInt(arrayData[2]); var dataUsuario = new Date(); dataUsuario.setDate(campoDia); dataUsuario.setMonth(campoMes -1); dataUsuario.setFullYear(campAno); var dataLimite = new Date(); dataLimite.setDate(dataLimite.getDate() + periodo); if(dataUsuario.getTime() <= dataLimite.getTime()){ return true; }else{ return false; } } |
Vamos aos pontos que merecem destaque na função isDataValida():
1 – A função isDataValida(data, periodo) recebe 2 parâmetros, primeiro parâmetro é uma data no formato “dd/mm/yyyy” o segundo parâmetro é um valor indicando o período em dias.
1 |
function isDataValida(data, periodo) |
2 – Como recebemos a data no formato “dd/mm/yyyy” temos que fragmentar dia, mês e ano para posteriormente passar esses parâmetros para o objeto Date.
1 2 3 4 |
var arrayData = data.split('/'); var campoDia = parseInt(arrayData[]); var campoMes = parseInt(arrayData[1]); var campAno = parseInt(arrayData[2]); |
3 – Criei um objeto do tipo Date e passei como parâmetros dia, mes e ano para alimentar o objeto dataUsuario.
1 2 3 4 |
var dataUsuario = new Date(); dataUsuario.setDate(campoDia); dataUsuario.setMonth(campoMes -1); dataUsuario.setFullYear(campAno); |
4 – Com outro objeto dataLimite adicionamos o período em dias, esse objeto basicamente vai conter a data atual mais os 30 dias passados como parâmetro no exemplo.
1 2 |
var dataLimite = new Date(); dataLimite.setDate(dataLimite.getDate() + periodo); |
5 – Agora ficou fácil, como temos 2 objetos Date podemos comparar as datas chamando o método getTime() que retorna um valor em milisegundos.
1 2 3 4 5 |
if(dataUsuario.getTime() <= dataLimite.getTime()){ return true; }else{ return false; } |
Testando nossa validação, primeiro informando a data “01/08/2015” com período de 30 dias, a data de execução desse teste “02/08/2015”, então a data passada é válida.
Testando data inválida, primeiro informando a data “01/10/2015” com período de 30 dias, a data de execução desse teste “02/08/2015”, então a data passada é inválida.
Bom pessoal nesse post demonstrei como podemos validar um período entre datas usando JavaScript puro, existem diversas aplicações e melhorias que podem ser aplicadas para esse código. Para o leitor que tiver curiosidade em conhecer todos os métodos do objeto Date do JavaScript, esse link possui mais informações.
Se você gostou desse post compartilhe nas redes sociais, até a próxima.