Como sempre consigo tirar minhas dúvidas aqui no WM, resolvi colaborar com um script de validação de data.
Havia achado um script básico e resolvi melhora-lo. Ele está 100% comentado e ao meu ver 100% funcional.
Caso encontrem algum erro favor postar.
Este script detalha a validação emitindo mensagens de alerta para os seguintes casos. (começando aberto e fechando as condições)
- Verifica se o dia digitado é menor de 31 maior que zero;
- Verifica se o mês digitado é menor ou igual a 12 e maior que zero;
- Verifica se o ano digitado é menor que o ano atual;
- Verifica se o mês digitado é maior que o mesmo atual;
- Verifica se o dia digitado é menor que o dia atual;
- Valida os meses que possuem apenas 30 dias;
- Verifica se o mês digitado é fevereiro e se o ano nao é bissesto (mês com 28 dias);
- Verifica se o mês digitado é fevereiro e se o ano é bissesto (mês com 29 dias);
Emite mensagem de alerta em todas as situações.
/*Corrigido em 23/10/2008*/
segue abaixo:
<script>//By Nivaldo Silveira. //Função validar data . function ValidaData() { //Inicio do If da função ValidaData(). //Recebe a data digitada no form. dtd = document.form1.dtnasc.value; //Verifica se o campo está vazio, se não estiver vazio faz a verificação da data. if (dtd!='') { //Inicio do if que verifica se a data está digitada. //Pega a data do computador local e armazena na variavel dts. var dts = new Date(); //Pega o dia do sistema e armazena separado na variavel sdia. var sdia = dts.getDate(); //Pega o mês e armazena na variavel smes. Em JavaScript o mês começa do 0 (zero), para termos o numero correto do mês atual para cálculo devemos somar o mes +1. var smes = dts.getMonth()+1; //Pega o ano atual (4 digitos) e armazena na variavel sano. var sano = dts.getFullYear(); //Armazena na variavel dia o dia digitado no formulário, buscando da variavel data criada anteriormente. var dia = dtd.substring(0,2); //Armazena na variável mes o mês digitado no formulário, buscando da variavel data criada anteriormente. var mes = dtd.substring(3,5); //Armazena na variável ano o ano digitado no formulário, buscando da variavel data criada anteriormente. var ano = dtd.substring(6,10); //Verifica se o dia digitado é menor de 31 maior que zero. if (dia<=31 && dia>0) {//Inicio do if de verificação da quantidade maxima de dias. //Verifica se o mês digitado é menor ou igual a 12 e maior que zero. if (mes<=12 && mes>0) {//Inicio do if que verifica a validade do mês. //Verifica se o ano digitado é menor que o ano atual. if (ano<=sano) {//Inicio - Verifica se o ano digitado é menor que o ano atual //Verifica se o mês digitado é maior que o mesmo atual. if (ano==sano && mes>smes) {//Inicio - Verifica se o mês digitado é maior que o mesmo atual. alert("Data incorreta!! O mês digitado é maior que o mês atual");//Emite um alerta informando o erro. //Posiciona o cursor do mouse no campo data para ser digitado novamente. document.form1.dtnasc.focus();//Emite um alerta informando o erro. //Cancela a execução da função. return false; }//Fim do if Verifica se o mês digitado é maior que o mesmo atual. //Verifica se o dia é menor que o dia atual. if(ano==sano && mes==smes && dia>sdia) {//Inicio do if Verifica se o dia é menor que o dia atual. alert("Data incorreta!! O dia digitado é maior que o dia atual");//Emite um alerta informando o erro. //Posiciona o cursor do mouse no campo data para ser digitado novamente. document.form1.dtnasc.focus();//Emite um alerta informando o erro. //Cancela a execução da função. return false; }//Fim do if Verifica se o dia é menor que o dia atual. //Valida os meses que possuem apenas 30 dias. if((mes==04 && dia > 30) || (mes==06 && dia > 30) || (mes==09 && dia > 30) || (mes==11 && dia > 30)) {//Inicio do If da verificação do mês de 30 dias. alert("Dia incorreto !!! O mês digitado contém no máximo 30 dias."); //Emite um alerta informando o erro. //Posiciona o cursor do mouse no campo data para ser digitado novamente. document.form1.dtnasc.focus(); //Cancela a execução da função. return false; }//Fim do If da verificação do mês de 30 dias. //Verifica se o mês digitado é fevereiro e se o ano nao é bissesto (mês com 28 dias). if(ano%4!=0 && mes==2 && dia>28) {//Inicio do If da verificação do mês de fevereiro (28 dias). alert("Data incorreta!! O mês digitado contém no máximo 28 dias."); //Emite um alerta informando o erro. //Posiciona o cursor do mouse no campo data para ser digitado novamente. document.form1.dtnasc.focus(); //Cancela a execução da função. return false; }//Fim do If da verificação do mês de de fevereiro (28 dias). //Verifica se o mês digitado é fevereiro e se o ano é bissesto (mês com 29 dias). if(ano%4==0 && mes==2 && dia>29) {//Inicio do If da verificação do mês de fevereiro (29 dias). alert("Data incorreta!! O mês digitado contém no máximo 29 dias.");//Emite um alerta informando o erro. //Posiciona o cursor do mouse no campo data para ser digitado novamente. document.form1.dtnasc.focus(); //Cancela a execução da função. return false; }//Fim do If da verificação do mês de de fevereiro (29 dias). }//Fim - Verifica se o ano digitado é menor que o ano atual. else//Negação da condição da verificação se o ano é menor que ano atual. {//Inicio do if da da mensagem verificação do ano. alert("Data incorreta!! O ano digitado é maior que o ano atual");//Emite um alerta informando o erro. //Posiciona o cursor do mouse no campo data para ser digitado novamente. document.form1.dtnasc.focus();//Emite um alerta informando o erro. //Cancela a execução da função. return false; }//Fim do if da mensagem verificação do ano. }//Fim do if que verifica a validade do mês. else//Negação da condição da verificação da digitação do mês. {//Inicio do if da da mensagem verificação do mês. alert("Data incorreta!! O mês deve ser maior que zero e menor que 13.");//Emite um alerta informando o erro. //Posiciona o cursor do mouse no campo data para ser digitado novamente. document.form1.dtnasc.focus();//Emite um alerta informando o erro. //Cancela a execução da função. return false; }//Fim do if da da mensagem verificação do mês. }//Fim do if de verificação da quantidade maxima de dias else//Negação da condição da verificação da digitação do dia. {//Inicio do if da da mensagem verificação do dia. alert("Data incorreta!! O dia deve ser maior que zero e menor que 31.");//Emite um alerta informando o erro. //Posiciona o cursor do mouse no campo data para ser digitado novamente. document.form1.dtnasc.focus();//Emite um alerta informando o erro. //Cancela a execução da função. return false; }//Fim do if da da mensagem verificação do dia. }//Fim do if que verifica se a data foi digitada. }//Fim da função ValidaData(). </script>
Edição feita por: KiGiL, 23/10/2008, 09:07.