Validar datas em Javascript


Autor/fonte: Marcos Regis
E-mail/Url: http://www.phpbrasil.com/script/tE3a2yIAZZK/validar-datas-em-javascrip...
Tags: [ datas ]




Script que valida datas no formato brasileiro em Javascript. Embora em Javascript exista o método parse para o objeto Date ele não é útil para validar datas.

Eu criei um método simples que valida a data baseado no padrão dia/mês/ano podendo aceitar outros formatos mais completos.

Script:

<script>
/**
* Valida uma data passada
* @param string dia
* @param string mes
* @param string ano
* @return Bool TRUE em caso de data válida, do contrário FALSE
*/
function checkDate(dia,mes,ano){
     	var dateRegExp =/^(19|20)\d\d-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$/;
        if (!dateRegExp.test(ano+"-"+mes+"-"+dia)) return false; // formato inválido
        if (dia == 31 && ( /^0?[469]$/.test(mes) || mes == 11) ) {
            return false; // dia 31 de um mes de 30 dias
        }else if (dia >= 30 && mes == 2) {
            return false; // mais de 29 dias em fevereiro
        }else if (mes == 2 && dia == 29 && !(ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0))) {
            return false; // dia 29 de fevereiro de um ano não bissexto
        }else {
            return true; // Data válida
        }
}


/**
* Valida uma hora passada
* @param int h Hora
* @param int m Minuto
* @param int s Segundo
* @return Bool TRUE em caso de horário válido, do contrário FALSE
*/    
function checkTime(h,m,s){
    	if(!s) s='00';
		var horarioRegExp = /^(0?\d|1\d|2[0-3]):[0-5]?\d:[0-5]?\d$/;
     return horarioRegExp.test(h+":"+m+":"+s);
}

/**
* Valida uma string de data passada
* @param String data Uma string representando uma data
* @param String formato O formato em que a data passada se encontra [default = (d/m/Y) + H:i:s 
* @return Bool TRUE em caso de data/hora válida, do contrário FALSE
*/ 

function parseDate(data,formato)
{
	if(!formato) 
	{	
		
		var mes = 2;
		var dia = 1;
		var ano = 3;
	}
	else
	{
		// Será usado o formato passado no segundo argumento
		formato = formato.toLowerCase().replace(/[^dmy]/g,'');
		var dia = formato.indexOf('d')+1;
		var mes= formato.indexOf('m')+1;
		var ano= formato.indexOf('y')+1;	
	}


	var matches = data.match(/^\b(\d+)\D(\d+)\D(\d+)\b\b(?:\s+(\d{1,2})\D(\d{2})\D*((\d{2})?))?\b$/);	


	  		// validando a data 
	  		if (!checkDate(matches[dia],matches[mes],matches[ano]))
	  		{
	  			return false;
	  		}
	  		else if(matches.length>=5)
	  		{
	  		 return checkTime(matches[4],matches[5],(matches[6]?matches[6]:false));
	  		}
	  		else
	  		{
	  		  return true;
	  		}

}

// Exemplo de uso
  if(parseDate('28/2010/02 23:30:59','d/Y/m H:i:s')) alert('Data válida');
else alert('Data inválida');
</script>

Exemplo de uso:

var data = '28/02/2010'; // Data válida
var data = '29/02/2010'; // Data inválida

var data = '01/13/2010'; // Data inválida
var data = '01/13/2010'; // Data válida se chamado com 'm/d/Y' como segundo argumento

if(parseDate(data)) alert('Data válida');
else alert('Data inválida');




Rec6 Digg del.icio.us

Enviado por xKuRt em 12/07/2010 às 20:56


Itens relacionados

IsDate(): Validando datas no Javascript
Validação de data
Checando qual das duas datas é maior
Máscara e validação de data e hora
Exibindo a data atual em Javascript
Calcular dias entre duas datas com Javascript
Saudação ao visitante dependendo do horário
Máscara para datas

Avaliação

Esta publicação ainda não foi avaliada!


Avaliar:


A avaliação de publicações é restrita a membros cadastrados e logados no nosso site.



Comentários

Este artigo ainda não foi comentado ou o(s) comentário(s) que foi(ram) enviado(s) a ele ainda não foi(ram) publicado(s).


Envio de comentário:




  

Quinta, 02 de Setembro de 2010


Top 5 membros

Últimos membros online

Últimos membros cadastrados