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:
Exemplo de uso:
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');

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!
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
Área restrita
Leitura recomendada
Últimas publicações
Top 5 membros
- dddweb213 pts
- Jotah191 pts
- fbinasco165 pts
- andersonop153 pts
- fredbcn117 pts
Últimos membros cadastrados
- reniltonem 02/09
- baixehdem 02/09
- danilocarlosem 02/09



