Foros del Web » Programando para Internet » Javascript »

Comparar fechas

Estas en el tema de Comparar fechas en el foro de Javascript en Foros del Web. Hola, ¿como puedo comparar dos fechas con JavaSript? me gustaría saber si una fecha es menor,igual o mayor que otra. Un saludo, Gracias....
  #1 (permalink)  
Antiguo 25/02/2005, 04:44
Avatar de TomaHawkk  
Fecha de Ingreso: diciembre-2001
Ubicación: España
Mensajes: 422
Antigüedad: 22 años, 4 meses
Puntos: 1
Pregunta Comparar fechas

Hola,

¿como puedo comparar dos fechas con JavaSript? me gustaría saber si una fecha es menor,igual o mayor que otra.

Un saludo,
Gracias.
__________________
ThE MaTriX HaS YoU
  #2 (permalink)  
Antiguo 25/02/2005, 07:36
Avatar de Chuty  
Fecha de Ingreso: noviembre-2002
Ubicación: el bar de la esquina
Mensajes: 609
Antigüedad: 21 años, 5 meses
Puntos: 2
TomaHawkk

En los Faqs, tienes varios ejemplos
http://www.forosdelweb.com/showthrea...856#post326199


Código PHP:
<html
<
head
  <
script language="JavaScript"

   function 
esDigito(sChr){ 
    var 
sCod sChr.charCodeAt(0); 
    return ((
sCod 47) && (sCod 58)); 
   } 

   function 
valSep(oTxt){ 
    var 
bOk false
    
bOk bOk || ((oTxt.value.charAt(2) == "-") && (oTxt.value.charAt(5) == "-")); 
    
bOk bOk || ((oTxt.value.charAt(2) == "/") && (oTxt.value.charAt(5) == "/")); 
    return 
bOk
   } 

   function 
finMes(oTxt){ 
    var 
nMes parseInt(oTxt.value.substr(32), 10); 
    var 
nAno parseInt(oTxt.value.substr(6), 10); 
    var 
nRes 0
    switch (
nMes){ 
     case 
1nRes 31; break; 
     case 
2nRes 28; break; 
     case 
3nRes 31; break; 
     case 
4nRes 30; break; 
     case 
5nRes 31; break; 
     case 
6nRes 30; break; 
     case 
7nRes 31; break; 
     case 
8nRes 31; break; 
     case 
9nRes 30; break; 
     case 
10nRes 31; break; 
     case 
11nRes 30; break; 
     case 
12nRes 31; break; 
    } 
    return 
nRes + (((nMes == 2) && (nAno 4) == 0)? 10); 
   } 

   function 
valDia(oTxt){ 
    var 
bOk false
    var 
nDia parseInt(oTxt.value.substr(02), 10); 
    
bOk bOk || ((nDia >= 1) && (nDia <= finMes(oTxt))); 
    return 
bOk
   } 

   function 
valMes(oTxt){ 
    var 
bOk false
    var 
nMes parseInt(oTxt.value.substr(32), 10); 
    
bOk bOk || ((nMes >= 1) && (nMes <= 12)); 
    return 
bOk
   } 

   function 
valAno(oTxt){ 
    var 
bOk true
    var 
nAno oTxt.value.substr(6); 
    
bOk bOk && ((nAno.length == 2) || (nAno.length == 4)); 
    if (
bOk){ 
     for (var 
0nAno.lengthi++){ 
      
bOk bOk && esDigito(nAno.charAt(i)); 
     } 
    } 
    return 
bOk
   } 

   function 
valFecha(oTxt){ 
    var 
bOk true
    if (
oTxt.value != ""){ 
     
bOk bOk && (valAno(oTxt)); 
     
bOk bOk && (valMes(oTxt)); 
     
bOk bOk && (valDia(oTxt)); 
     
bOk bOk && (valSep(oTxt)); 
     return 
bOk
    } 
   } 

   function 
fechaMayorOIgualQue(fec0fec1){ 
    var 
bRes false
    var 
sDia0 fec0.value.substr(02); 
    var 
sMes0 fec0.value.substr(32); 
    var 
sAno0 fec0.value.substr(64); 
    var 
sDia1 fec1.value.substr(02); 
    var 
sMes1 fec1.value.substr(32); 
    var 
sAno1 fec1.value.substr(64); 
    if (
sAno0 sAno1bRes true
    else { 
     if (
sAno0 == sAno1){ 
      if (
sMes0 sMes1bRes true
      else { 
       if (
sMes0 == sMes1
        if (
sDia0 >= sDia1bRes true
      } 
     } 
    } 
    return 
bRes
   } 

   function 
valFechas(){ 
    var 
bOk false
    if (
valFecha(document.f1.fec0)){ 
     if (
valFecha(document.f1.fec1)){ 
      if (
fechaMayorOIgualQue(document.f1.fec1document.f1.fec0)){ 
       
bOk true
       
alert("Ok"); 
      } else { 
       
alert("Rango inválido"); 
       
document.f1.fec1.focus(); 
      } 
     } else { 
      
alert("Fecha inválida"); 
      
document.f1.fec1.focus(); 
     } 
    } else { 
     
alert("Fecha inválida"); 
     
document.f1.fec0.focus(); 
    } 
   } 

  
</script> 
</head> 
<body> 
  <form name="f1"> 
   <table> 
    <tr> 
     <td align="right"> 
      Fecha inicial (dd/mm/aaaa): 
     </td> 
     <td> 
      <input type="text" size="10" name="fec0"> 
     </td> 
    </tr> 
    <tr> 
     <td align="right"> 
      Fecha final (dd/mm/aaaa): 
     </td> 
     <td> 
      <input type="text" size="10" name="fec1"> 
     </td> 
    </tr> 
    <tr> 
     <td colspan="2" align="center"> 
      <input type="button" name="val" value="Validar" onclick="valFechas()"> 
     </td> 
    </tr> 
   </table> 
  </form> 
</body> 
</html> 
Saludos
  #3 (permalink)  
Antiguo 25/02/2005, 07:39
Avatar de TomaHawkk  
Fecha de Ingreso: diciembre-2001
Ubicación: España
Mensajes: 422
Antigüedad: 22 años, 4 meses
Puntos: 1
Hola,

en los ejemplos de los faqs no viene exactamente lo que quiero y no se como puedo hacerlo. Hecharé un vistazo e intentare adaptarlo.

Salu2 y gracias.
__________________
ThE MaTriX HaS YoU

Última edición por TomaHawkk; 25/02/2005 a las 07:41
  #4 (permalink)  
Antiguo 25/02/2005, 11:06
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Hola TomaHawkk

A ver si te sirve este código. Ten en cuenta que las fechas tienen que ser en formato mm/dd/aa
Código PHP:
fecha1='10/25/04';
fecha2='10/15/05';
f1=new Date(fecha1);
f2=new Date(fecha2);
if (
f1<f2alert("f1 es menor que f2"
Saludos,
  #5 (permalink)  
Antiguo 28/02/2005, 01:44
Avatar de TomaHawkk  
Fecha de Ingreso: diciembre-2001
Ubicación: España
Mensajes: 422
Antigüedad: 22 años, 4 meses
Puntos: 1
Hola,

gracias funciona perfecto. Por defecto es "mm/dd/aa" ?? no hay forma de decirle que eso sea "dd/mm/aa" ?? que raro no...

Un saludo.
__________________
ThE MaTriX HaS YoU
  #6 (permalink)  
Antiguo 30/07/2007, 10:15
 
Fecha de Ingreso: agosto-2005
Mensajes: 1
Antigüedad: 18 años, 8 meses
Puntos: 0
Re: Comparar fechas

Cita:
Iniciado por TomaHawkk Ver Mensaje
Hola,

gracias funciona perfecto. Por defecto es "mm/dd/aa" ?? no hay forma de decirle que eso sea "dd/mm/aa" ?? que raro no...

Un saludo.
a mi me funciona perfecto con fecha dd/mm/aaaa, lo estoy ocupando con ASP y le coloco el LCID en 1034 para que las fechas se manejen en este formato


salu3
  #7 (permalink)  
Antiguo 31/07/2007, 09:01
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
Re: Comparar fechas

@TomaHawkk:

Pues no encuentro manera de hacer eso directamente, eso sí, indirectamente es fácil de lograr:
Código:
String.prototype.fechaDDMMAAAA = function() {
	return this.replace(/^(\d{2})\/(\d{2})\/(\d{4})$/, "$2/$1/$3");
}
String.prototype.fechaMMDDAAAA = function() {
	return this.replace(/^(\d{2})\/(\d{2})\/(\d{4})$/, "$2/$1/$3");
}

var fecha1="25/10/2004";
var fecha2="15/10/2005";

alert( fecha1+" --> "+fecha1.fechaDDMMAAAA() );

f1=new Date( fecha1.fechaMMDDAAAA() );
f2=new Date( fecha2.fechaMMDDAAAA() );
if (f1<f2) alert("f1 es menor que f2");
Sólo hay que implementar dos métodos de traducción.


@KhaL:
Sí que "funciona" con dd/mm/aaaa, quiero decir que no da error. Pero la fecha que consigues es totalmente equivocada, ya que javascript "ajusta" la fecha que le has dado tú a la correcta. Quiero decir, que si le metes 31 de febrero automáticamente él ajustará la fecha a lo que se supone que tú querías decir, esto es:
No bisiesto: ...27, 28, 1, 2, 3... ----> Querías decir 3 de marzo
Bisiesto: ...27, 28, 29, 1, 2, 3... ----> Querías decir 2 de marzo

Ésto es muy útil para validar si una fecha es correcta, comprobamos lo que introduce el usuario y lo que javascript ajusta, así si son iguales es correcta y si no es incorrecta.



Un saludo.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #8 (permalink)  
Antiguo 05/02/2008, 14:14
 
Fecha de Ingreso: agosto-2004
Mensajes: 440
Antigüedad: 19 años, 8 meses
Puntos: 2
Re: Comparar fechas

Cita:
Iniciado por JavierB Ver Mensaje
Hola TomaHawkk

A ver si te sirve este código. Ten en cuenta que las fechas tienen que ser en formato mm/dd/aa
Código PHP:
fecha1='10/25/04';
fecha2='10/15/05';
f1=new Date(fecha1);
f2=new Date(fecha2);
if (
f1<f2alert("f1 es menor que f2"
Saludos,

hola yo estoy busncano algo como esto es para unaagencia de viajes pero necesito comparar la fecha de llegada con la de salida para que no me deje seleccionar la fecha de salida antes q la de llegada pero nose como hacerlo
__________________
paty :adios:
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.
Tema Cerrado

SíEste tema le ha gustado a 2 personas (incluyéndote)




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