Foros del Web » Programando para Internet » Javascript »

No aceptar fechas superiores a hoy

Estas en el tema de No aceptar fechas superiores a hoy en el foro de Javascript en Foros del Web. Necesitaría corregir el siguiente codigo para que, cuando se ingresa en un textbox una fecha superior a hoy, salte el error. Código: function check_date(field){ var ...
  #1 (permalink)  
Antiguo 23/06/2005, 10:12
 
Fecha de Ingreso: octubre-2004
Mensajes: 50
Antigüedad: 19 años, 6 meses
Puntos: 0
No aceptar fechas superiores a hoy

Necesitaría corregir el siguiente codigo para que, cuando se ingresa en un textbox una fecha superior a hoy, salte el error.

Código:
	function check_date(field){
	var checkstr = "0123456789";
	var DateField = field;
	var Datevalue = "";
	var DateTemp = "";
	var seperator = "/";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;
   err = 0;
   DateValue = DateField.value;
   /* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   /* Validation of month*/
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
   day = DateValue.substr(0,2);
   if (day < 1) {
     err = 22;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }
   /* if 00 ist entered, no error, deleting the entry */
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }
   /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   if (err == 0) {
      DateField.value = day + seperator + month + seperator + year;
   }
   /* Error-message if err != 0 */
   else {
      alert("¡La fecha ingresada es incorrecta! (dd/mm/aaaa)");
      DateField.select();
	  DateField.focus();
   }
}
Gracias!!
  #2 (permalink)  
Antiguo 24/06/2005, 02:13
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 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;
    }
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:25.