Ver Mensaje Individual
  #20 (permalink)  
Antiguo 01/12/2002, 21:44
Avatar de Kaopectate
Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 24 años, 9 meses
Puntos: 38
20.- Validar un rango de fechas

P: ¿Como puedo validar un rango de fechas para que ambos valores sean no vacíos, válidos, y la fecha hasta sea mayor o igual que la fecha desde?

R: [ver ejemplo]

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(3, 2), 10);
    var 
nAno = parseInt(oTxt.value.substr(6), 10);
    var 
nRes = 0;
    switch (
nMes){
     case 
1: nRes = 31; break;
     case 
2: nRes = 28; break;
     case 
3: nRes = 31; break;
     case 
4: nRes = 30; break;
     case 
5: nRes = 31; break;
     case 
6: nRes = 30; break;
     case 
7: nRes = 31; break;
     case 
8: nRes = 31; break;
     case 
9: nRes = 30; break;
     case 
10: nRes = 31; break;
     case 
11: nRes = 30; break;
     case 
12: nRes = 31; break;
    }
    return 
nRes + (((nMes == 2) && (nAno % 4) == 0)? 1: 0);
   }

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

   function 
valMes(oTxt){
    var 
bOk = false;
    var 
nMes = parseInt(oTxt.value.substr(3, 2), 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 
i = 0; i < nAno.length; i++){
      
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(fec0, fec1){
    var 
bRes = false;
    var 
sDia0 = fec0.value.substr(0, 2);
    var 
sMes0 = fec0.value.substr(3, 2);
    var 
sAno0 = fec0.value.substr(6, 4);
    var 
sDia1 = fec1.value.substr(0, 2);
    var 
sMes1 = fec1.value.substr(3, 2);
    var 
sAno1 = fec1.value.substr(6, 4);
    if (
sAno0 > sAno1) bRes = true;
    else {
     if (
sAno0 == sAno1){
      if (
sMes0 > sMes1) bRes = true;
      else {
       if (
sMes0 == sMes1)
        if (
sDia0 >= sDia1) bRes = true;
      }
     }
    }
    return 
bRes;
   }

   function 
valFechas(){
    var 
bOk = false;
    if (
valFecha(document.f1.fec0)){
     if (
valFecha(document.f1.fec1)){
      if (
fechaMayorOIgualQue(document.f1.fec1, document.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> 

Última edición por Kaopectate; 23/04/2003 a las 09:06