El regex obviamente se puede mejorar (o cambiar), pero lo dejo de esa forma para que se pueda reutilizar checkeando fechas en el formato mm/dd/yyyy. En si, lo importante del codigo es el checkeo de si es o no un año bisiesto.
$(function() {
var regexDateValidator = function (month, day, year) {
return (month + "/" + day + "/" + year).match(/(0[1-9]|1[012])[\- \/.](0[1-9]|[12][0-9]|3[01])[\- \/.]((?:19|20)+\d{2})/);
}
$("select[id*='detect_']").change(function () {
var result, check, month, day, year;
result = regexDateValidator(month = $('#detect_month').val(), day = $('#detect_day').val(), year = $('#detect_year').val());
if ( Boolean(result) ) {
if ( result[2] == 31 && (result[1] == 4 || result[1] == 6 || result[1] == 9 || result[1] == 11) ) {
check = false; // 31 de un mes con 30 dias
} else if (result[2] >= 30 && result[1] == 2) {
check = false; // febrero 30 o 31
} else if ( (result[1] == 2) && (result[2] == 29) && ( !(result[3] % 4 == 0 && (result[3] % 100 != 0 || result[3] % 400 == 0)) ) ) {
check = false; // febrero 29 fuera de un año bisiesto
} else {
check = true;
}
} else {
check = false;
}
if ( check ) {
// hacer algo (fecha valida)
} else {
// hacer algo (fecha invalida)
}
});
});
Ojala le resulte util a alguien ...
Saludos !
1 comment:
Excelente, me saco de un apuro gracias
Post a Comment