
24/06/2005, 02:13
|
| | Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 21 años, 8 meses Puntos: 1 | |
Se me ocurre algo como lo siguiente:
Código:
function verificar_fecha (elem)
{
var aux;
var bisiesto = 0;
var errno;
var i;
var valor;
var dia, mes, anyo;
var sep = '/'; // separador
errno = 0;
valor = elem.value;
// Eliminar todos los caracteres excepto 0..9
aux = '';
for (i = 0; i < valor.length; i++) {
if (valor.charCodeAt (i) >= "0".charCodeAt(0) &&
valor.charCodeAt (i) <= "9".charCodeAt(0)) {
aux += valor.charAt (i);
}
}
valor = aux;
// Asegurarse de que sea una cadena de 8 digitos
if (valor.length == 6) {
valor = valor.substr(0,4) + '20' + valor.substr(4,2);
}
if (valor.length != 8) {
errno = 19;
}
// el anyo no puede ser = 0000
anyo = valor.substr (4, 4);
if (anyo == 0) {
errno = 20;
}
// Validacion del mes
mes = valor.substr(2,2);
if ((mes < 1) || (mes > 12)) {
errno = 21;
}
// Validacion del dia
dia = valor.substr(0,2);
if (dia < 1) {
errno = 22;
}
// Validacion anyo bisiesto
if ((anyo % 4 == 0) || (anyo % 100 == 0) || (anyo % 400 == 0)) {
bisiesto = 1;
}
if ((mes == 2) && (bisiesto == 1) && (day > 29)) {
errno = 23;
}
if ((mes == 2) && (bisiesto != 1) && (day > 28)) {
errno = 24;
}
// Validacion de otros meses
if (dia > 31) {
errno = 25;
}
if ((dia > 30) && ((mes == '04') || (mes == '06') ||
(mes == '09') || (mes == '11'))) {
errno = 26;
}
// si se ingresa 00, no hay error, simplemente le elimina la entrada
if ((dia == 0) && (mes == 0) && (anyo == 00)) {
errno = 0;
dia = '';
mes = '';
anyo = '';
sep = '';
}
// Validar si la fecha es mayor que la fecha actual
fecha_campo = new Date (anyo, mes - 1, dia);
fecha_actual = new Date ();
if (fecha_campo.valueOf () > fecha_actual.valueOf ()) {
errno = 27;
}
// si no hay error, escribir la fecha completa (p.e. 13/12/2001)
if (errno == 0) {
elem.value = dia + sep + mes + sep + anyo;
} else {
var errstr = '';
switch (errno) {
// Falta validar otros errores segun el valor de 'errno'
case 27:
errstr = 'La fecha dada es mayor que la fecha actual';
break;
default:
errstr = 'Error desconocido ' + errno;
break;
}
alert("La fecha ingresada es incorrecta! (dd/mm/aaaa):\n" + errstr);
elem.select();
elem.focus();
}
}
Note que he cambiado un poco el código mientras estuve probándolo, así que la función y las variables tienen nombres diferentes, pero los algoritmos y la gran mayoría del código permanece igual. El segmento realmente interesante es solo éste:
Código:
// Validar si la fecha es mayor que la fecha actual
fecha_campo = new Date (anyo, mes - 1, dia);
fecha_actual = new Date ();
if (fecha_campo.valueOf () > fecha_actual.valueOf ()) {
errno = 27;
}
|