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: 20 años, 5 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(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> 

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