Foros del Web » Programando para Internet » Javascript »

funcion fecha correcta

Estas en el tema de funcion fecha correcta en el foro de Javascript en Foros del Web. existe alguna funcion en javascript q mire si la fecha es correcta o no?...
  #1 (permalink)  
Antiguo 24/05/2005, 01:14
 
Fecha de Ingreso: marzo-2005
Mensajes: 276
Antigüedad: 19 años, 2 meses
Puntos: 0
Pregunta funcion fecha correcta

existe alguna funcion en javascript q mire si la fecha es correcta o no?
  #2 (permalink)  
Antiguo 24/05/2005, 04:35
 
Fecha de Ingreso: abril-2004
Mensajes: 44
Antigüedad: 20 años
Puntos: 1
Hola Jennifer_munn!!!

Yo utilizo esta función para validar las fechas, espero que te sirva:

Código PHP:
function validarFechacampo ){
   if (
campo.value == ''){
      return;
   }
   
/* Comprobar que el formato  es dd/mm/aaaa, aunque si el formato de 
      fecha que utilizas es otro, puedes cambiar esta parte de comprobación 
   */
   
while (campo.value.indexOf ('.') > - ){
      
campo.value campo.value.replace('.''/');
   }
   while (
campo.value.indexOf ('-') > - ){
      
campo.value campo.value.replace('-''/');
   }
   var 
fechaexp = /^dd/dd/dddd$/;    
   if ((
campo.value.indexOf ('/') < ) || (!fechaexp.test(campo.value))){
      
alert("La fecha de tener el formato dd/mm/aaaa");
      
campo.focus();
      
campo.select();
      return;
   }
    
/* Obtener la fecha introducida y se separa en dia, mes y año*/
   
campo.value;
   
dia=a.split("/")[0];
   
mes=a.split("/")[1];
   
anyo=a.split("/")[2];
   if(
anyoBisiesto(anyo))
      
febrero=29;
   else
      
febrero=28;
   
/* si el mes introducido es negativo, 0 o mayor que 12, se avisa y se para 
      la ejecución */
   
if ((mes<1) || (mes>12)){
      
alert("El mes introducido no es valido. Por favor, introduzca un mes correcto");
      
campo.focus();
      
campo.select();
      return;
   }
   
/* si el mes introducido es febrero y el dia es mayor que el 
      correspondiente al año introducido se avisa y se para la ejecucion */
   
if ((mes==2) && ((dia<1) || (dia>febrero))){
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
      
campo.focus();
      
campo.select();
      return;
   }
   
/* si el mes introducido es de 31 dias y el dia introducido es mayor de 
      31 se avisa y se para la ejecucion
   */
   
if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31))){
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
      
campo.focus();
      
campo.select();
      return;
   }
   
/* si el mes introducido es de 30 dias y el dia introducido es mayor de 
      30 se avisa y se para la ejecucion
   */
   
if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30))){
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto");
      
campo.focus();
      
campo.select();
      return;
   }
   
/* si el mes año introducido es menor que 1900 o mayor que 2100 se 
      avisa y se para la ejecución
      NOTA: estos valores son una elección, en realidad no son años 
      erróneos, solo sirve para validar un intervalo de años en caso de ser
      necesario */       
   
if ((anyo<1900) || (anyo>2100)){
      
alert("El año introducido no es valido. Por favor, introduzca un año entre 1900 y 2100");
      
campo.focus();
      
campo.select();
      return;
   } 
   
/* Si ha superado todas las condiciones anteriores es que la fecha 
      introducida es correcta */
   
return true;

Suerte!
__________________
sometimes, I feel I should go and play with the thunder
  #3 (permalink)  
Antiguo 21/07/2005, 11:48
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 9 meses
Puntos: 105
Holas

Porque esta funcion no me trabaja bien en FireFox????

var fechaexp = /^dd/dd/dddd$/;

me bota este mensaje: "Error: invalid flag after regular expression" y me señala en los digitos del mes "dd".

Porque??

Saludos
Gildus
__________________
.: Gildus :.
  #4 (permalink)  
Antiguo 21/07/2005, 18:25
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
He arreglado un poco la funcion, que me parecia un poco chapucera. Tambien he incluido la funcion anyoBisiesto, que falta. Y la expresion regular.. me sonaba a inventada, asi que he puesto una correcta.

Tambien he añadido un return false siempre que la validacion sea fallida, ya que se devolvia el true pero no el false. He quitado alguna que otra validacion inutil (como la primera de saber si esta vacio, ya se comprueba con la expresion regular) y creo que nada mas.

Funciona en IE, Firefox y Opera, los he probado yo:

Código PHP:
<script>

function 
anyoBisiesto(anyo){ 
    
//si el año introducido es de dos cifras lo pasamos al periodo de 1900. Ejemplo: 25 > 1925 
    
if (anyo 100
        var 
fin=anyo+1900
    else 
        var 
fin=anyo
    
/* 
    * primera condicion: si el resto de dividir el año entre 4 no es cero > el año no es bisiesto 
    * es decir, obtenemos año modulo 4, teniendo que cumplirse anyo mod(4)=0 para bisiesto 
    */ 
    
if (fin != 0
        return 
false
    else { 
        if (
fin 100 == 0){ 
            
//si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto  
            
if (fin 400 == 0)
                return 
true
            
//si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto  
            
else
                return 
false
        } 
        
//si es divisible por 4 y no es divisible por 100 > el año es bisiesto 
        
else 
            return 
true
    }
}


function 
validarFechacampo ){ 
   
/* Comprobar que el formato  es dd/mm/aaaa, aunque si el formato de 
      fecha que utilizas es otro, puedes cambiar esta parte de comprobación 
   */ 
   
campo.value campo.value.replace(/./g'/'); 
   
campo.value campo.value.replace(/-/g'/'); 
   var 
fechaexp = new RegExp('^[0-9]{2}/[0-9]{2}/[0-9]{4}$');     
   if (!
fechaexp.test(campo.value)){ 
      
alert("La fecha de tener el formato dd/mm/aaaa"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
    
/* Obtener la fecha introducida y se separa en dia, mes y año */ 
   
campo.value
   
dia=a.split("/")[0];
   
mes=a.split("/")[1];
   
anyo=a.split("/")[2];
   if(
anyoBisiesto(anyo)) 
      
febrero=29
   else 
      
febrero=28
   
/* si el mes introducido es negativo, 0 o mayor que 12, se avisa y se para 
      la ejecución */ 
   
if ((mes<1) || (mes>12)){ 
      
alert("El mes introducido no es valido. Por favor, introduzca un mes correcto"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   }
   
/* si el mes introducido es febrero y el dia es mayor que el 
      correspondiente al año introducido se avisa y se para la ejecucion */ 
   
if ((mes==2) && ((dia<1) || (dia>febrero))){ 
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
   
/* si el mes introducido es de 31 dias y el dia introducido es mayor de 
      31 se avisa y se para la ejecucion 
   */ 
   
if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31))){ 
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
   
/* si el mes introducido es de 30 dias y el dia introducido es mayor de 
      30 se avisa y se para la ejecucion 
   */ 
   
if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30))){ 
      
alert("El dia introducido no es valido. Por favor, introduzca un dia correcto"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
   
/* si el mes año introducido es menor que 1900 o mayor que 2100 se 
      avisa y se para la ejecución 
      NOTA: estos valores son una elección, en realidad no son años 
      erróneos, solo sirve para validar un intervalo de años en caso de ser 
      necesario */        
   
if ((anyo<1900) || (anyo>2100)){ 
      
alert("El año introducido no es valido. Por favor, introduzca un año entre 1900 y 2100"); 
      
campo.focus(); 
      
campo.select(); 
      return 
false
   } 
   
/* Si ha superado todas las condiciones anteriores es que la fecha 
      introducida es correcta */ 
   
return true;
}
</script>

<input type="text" onchange="alert( validarFecha(this) )" size="52"> 
saludos, a ver si ahora funciona todo bien...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 22/07/2005, 12:17
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
Hola
La parte de ir verificando por separado día, mes, año, bisiesto, etc. se puede simplificar aprovechando las funciones de fecha de javascript:
Código HTML:
Validar fecha:
<script>
function esFecha(formu)
{
	var elDia=formu.txt_dia.value
	var elMes=formu.txt_mes.value-1
	var elAnio=formu.txt_anio.value
	var ff = new Date(elAnio, elMes, elDia)
	if ( ff.getDate() != elDia ) return false
	if ( ff.getMonth() != elMes ) return false
	if ( ff.getFullYear() != elAnio ) return false
	return true
}
</script>
<form>
<input type="text" name="txt_dia" size="4">/
<input type="text" name="txt_mes" size="4">/
<input type="text" name="txt_anio" size="4">
<input type="button" value="Validar fecha" onClick="alert(esFecha(this.form))">
</form> 
Lo he puesto con 3 campos de texto, pero es fácil adaptarlo a otra forma de entrada; lo importante es que evitas andar verificando los 1900, los 2000, los meses de 30 y 31, los bisiestos, etc.
__________________
Angel :cool:
  #6 (permalink)  
Antiguo 22/07/2005, 19:29
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Muy buen apunte angsanchez.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 07/10/2005, 10:17
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
muy bueno angsanchez

muy bueno angsanchez me sirvio mucho
tu script amigo
__________________
gerardo
  #8 (permalink)  
Antiguo 10/05/2006, 08:16
 
Fecha de Ingreso: diciembre-2005
Mensajes: 33
Antigüedad: 18 años, 4 meses
Puntos: 0
muy buena la funcion.. pero una pregunta d enovato.. como puedo hacer para que en lugar de false el mensaje del alert diga Dia invalido
muchas gracias
  #9 (permalink)  
Antiguo 10/05/2006, 08:23
 
Fecha de Ingreso: diciembre-2005
Mensajes: 33
Antigüedad: 18 años, 4 meses
Puntos: 0
me acorde de otro problema.. como puedo hacer para que despues del mensaje de error "dia invalido" vuelva el foco a el campo dia
  #10 (permalink)  
Antiguo 10/05/2006, 08:25
 
Fecha de Ingreso: diciembre-2005
Mensajes: 33
Antigüedad: 18 años, 4 meses
Puntos: 0
muy buena la funcion.. pero una pregunta d enovato.. como puedo hacer para que en lugar de false el mensaje del alert diga Dia invalido
muchas gracias
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 08:06.