/** * 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 nao 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 checkHorario(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); } function parseDate(data) { // referenciando os objetos var matches = data.match(/^(\d{1,2})\D(\d{1,2})\D(\d{2}|\d{4})(\s+(\d+)\D(\d+)\D(\d+))?$/); // validando a data if (!checkDate(matches[1],matches[2],matches[3])) { return false; } else if(matches.lenght>=5) { return checkTime(matches[4],matches[5],(matches[6]?matches[6]:false)); } else { return true; } }