/** * Verifica se o período selecionado é inferior ao limite * @param int Qt máxim de dias para o período */ function validaPeriodo(inicio,fim,max_dias){ try { // referenciando os objetos var dataI = inicio.match(/^(\d{1,2})\D(\d{1,2})\D(\d{2}|\d{4})$/); // validando a data if (!parseDate(dataI[1],dataI[2],dataI[3])){ alert('A data inicial é inválida!'); return false; } var di = new Date(dataI[3],dataI[2]-1,dataI[1],0,0,0,0); var dataF = fim.match(/^(\d{1,2})\D(\d{1,2})\D(\d{2}|\d{4})$/); if (!parseDate(dataF[1],dataF[2],dataF[3])){ alert('A data final é inválida!'); return false; } var df = new Date(dataF[3],dataF[2]-1,dataF[1],0,0,0,0); if(df-di > parseInt(max_dias)*24*3600*1000){ var dmin = new Date(dataF[3],dataF[2]-1,dataF[1]-parseInt(p)+1,0,0,0,0); $('dataI').value=dmin.getDate()+'/'+(dmin.getMonth()+1)+'/'+dmin.getFullYear(); alert('O período máximo para pesquisas é de '+parseInt(max_dias)+' dias!'); return false; } } catch (e) { alert('Uma ou mais datas passadas são inválidas'); return false; } return true; } /** * Valida uma data passada * @param int dia * @param int mes * @param int ano * @return Bool TRUE em caso de data válida, do contrário FALSE */ function parseDate(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 && ( mes.indexOf('469')>0 || 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 nao bissexto }else { return true; // Data válida } } Exemplo de uso Validando um período de 120 dias validaPeriodo('01/01/2008','04/04/2008',120); // retornará falso