Sempre que ao pesquisar sobre uma validação de data encontrava muito código para pouco resultado, e após algum estudo resolvi criar uma validação feita por mim, utilizei um conceito muito simples: se após converter o valor para o tipo Data e após a conversão a data ainda for a mesma, quer dizer que a conversão foi um sucesso, então sabemos que a data é válida.
//-----------------------------------------------------------------
// Entrada DD/MM/AAAA
//-----------------------------------------------------------------
function fctValidaData(obj)
{
var data = obj.value;
var dia = data.substring(0,2)
var mes = data.substring(3,5)
var ano = data.substring(6,10)
//Criando um objeto Date usando os valores ano, mes e dia.
var novaData = new Date(ano,(mes-1),dia);
var mesmoDia = parseInt(dia,10) == parseInt(novaData.getDate());
var mesmoMes = parseInt(mes,10) == parseInt(novaData.getMonth())+1;
var mesmoAno = parseInt(ano) == parseInt(novaData.getFullYear());
if (!((mesmoDia) && (mesmoMes) && (mesmoAno)))
{
alert('Data informada é inválida!');
obj.focus();
return false;
}
return true;
}
Segue abaixo um exemplo de como utilizar a function:
<body>
Data:
<input type='text' id='txtDt' name='txtDt' onblur='fctValidaData(this);'/>
</body>
Muito legal seu código funciona perfeitamente!!! Você saberia me dizer como faço para entrada ano-mes-dia???
ResponderExcluirOi, tudo bem, então, para este código não é possível pois é feito de forma genérica, podemos perceber que dentro dele não faz menção a nenhum nome de input...
ExcluirMas para resolver seu problema é simples sem fazer de forma genérica você vai ter que chamar os inputs de dia, mês e ano dentro do código substituindo....
var dia = data.substring(0,2)
var mes = data.substring(3,5)
var ano = data.substring(6,10)
por
var dia = document.getElementById('inputDia').value;
var mes = document.getElementById('inputMes').value;
var ano = document.getElementById('inputAno').value;
todos os 3 inputs devem conter o onblur..... sem passagem de parametros
espero que tenha ajudado
Abraço
Não sei se foi isso que a gracy perguntou...
ExcluirEu usei este script para aaaa-mm-dd alterando
var dia = data.substring(0,2)
var mes = data.substring(3,5)
var ano = data.substring(6,10)
por
var ano = data.substring(0,4)
var mes = data.substring(5,7)
var dia = data.substring(8,10)
Perfeito amigão, parabéns pelo belo trabalho, me ajudou muito.
ResponderExcluirValeu, espero em breve poder estar contribuindo mais com javascript, apesar da maioria do conteúdo publicado for de banco de dados.
ExcluirMuito obrigado, me ajudou muito
ResponderExcluirvlw amigão simples limpo e objetivo
ResponderExcluirNão faz validação de ano bisexto! Tem uma validacao boa em http://codigofonte.uol.com.br/codigos/validacao-completa-de-datas-em-javascript
ResponderExcluirOi tudo bem,
ExcluirGostaria de saber qual dado informado falhou na validação do bisexto, pois este código prevê anos bisexto sim.
Olhei o link que você postou e achei interessante, mas agora quero consertar falhas no meu caso existam.
Obrigado.
esse é que não dá...
ExcluirTá validando bisexto sim! O colega pode ter colocado uma data inválida!
Excluiramigo esta dando data incorreta para o dia 19/10/2014
ResponderExcluircomigo funcionou bem para 19-10-2014
ExcluirNão está validando o ano.
ResponderExcluirBah cara no meu fica dando mensagem da mensagem errada e não deixa eu mexer mais no site
ResponderExcluirTem que retirar a linda de código obj.focus(); então funciona!
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirBoa noite, gostaria de validar apenas o mês e o ano, se o mês for maior de 12 retorna erro e comparar o ano, se for menor que o ano atual retornar erro tb, dados vindos de um input com máscara mm/aaaa
ResponderExcluirè possível? Obrigado
o código no começo aparentemente funcionou corretamente, mas no momento em que digitei uma data, por exemplo, assim: 12/03/200, ele validou na mesma sendo que a data esta incorreta.
ResponderExcluirOlá,
ResponderExcluirO código funciona direitinho. Top demais, no entanto o obj.focus() não deu certo. Quando há erros, exibe o alert, mas não volta para o campo. Pode me ajudar?