Foros del Web » Programando para Internet » PHP »

Validando una fecha

Estas en el tema de Validando una fecha en el foro de PHP en Foros del Web. hola muchachos tengo un formulario donde recojo una fecha por alguna razón teniendole un calendario a los usuarios igual ingresan cosas incoherentes entonces tuve que ...
  #1 (permalink)  
Antiguo 25/03/2011, 07:05
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Validando una fecha

hola muchachos tengo un formulario donde recojo una fecha por alguna razón teniendole un calendario a los usuarios igual ingresan cosas incoherentes entonces tuve que empezar a validar que me ingresen una fecha correcta y real.

entonces tengo algo como :

Código PHP:
Ver original
  1. $di1 = str_replace("-","/",$_POST[date_input]);//fecha que viene de input y me cambia los - por /
  2.  
  3. //ahora veo si me ingresaron un dia como 1 o 01 y lo cambiamos lo mismo al mes
  4. $fecha_x1 = explode("/", $di1); //FECHA 1 Ingresada
  5. /**/if ($fecha_x1[0] == '1'){$dia1 = '01';}elseif ($fecha_x1[0] == '2'){$dia1 = '02';}elseif ($fecha_x1[0] == '3'){$dia1 = '03';}elseif ($fecha_x1[0] == '4'){$dia1 = '04';}
  6. elseif ($fecha_x1[0] == '5'){$dia1 = '05';}elseif ($fecha_x1[0] == '6'){$dia1 = '06';}elseif ($fecha_x1[0] == '7'){$dia1 = '07';}elseif ($fecha_x1[0] == '8'){$dia1 = '08';}elseif ($fecha_x1[0] == '9'){$dia1 = '09';}else{$dia1 = "$fecha_x1[0]";}
  7. /**/if ($fecha_x1[1] == '1'){$mes1 = '01';}elseif ($fecha_x1[1] == '2'){$mes1 = '02';}elseif ($fecha_x1[1] == '3'){$mes1 = '03';}elseif ($fecha_x1[1] == '4'){$mes1 = '04';}
  8. elseif ($fecha_x1[1] == '5'){$mes1 = '05';}elseif ($fecha_x1[1] == '6'){$mes1 = '06';}elseif ($fecha_x1[1] == '7'){$mes1 = '07';}elseif ($fecha_x1[1] == '8'){$mes1 = '08';}
  9. elseif ($fecha_x1[1] == '9'){$mes1 = '09';}else{$mes1 = "$fecha_x1[1]";}
  10. $anio1 = $fecha_x1[2];
  11. $fecha_inicio = "$anio1-$mes1-$dia1";//ANIO MES DIA PRIMER INPUT
  12.  
  13. //luego cuando valido pregunto
  14. if ($_POST[date_input] == ""){echo "Debe ingresar la Fecha de Inicio";}
  15. if (!checkdate($fecha_x1[1], $fecha_x1[0], $fecha_x1[2])){echo "La Fecha es incorrecta";}}


Todo ok pero probando me di cuenta que si ingreso 1568 el checkdate no funciona me valida igual, y si ingreso texto :/ también me lo valida alguna sugerencia.

ya probé también con strlen pero después me di cuenta que la fecha puede ser de 10 caracteres como menos de 10 en el caso de los días y meses y debería validarmelos igual, asi que lo omití.

Saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #2 (permalink)  
Antiguo 25/03/2011, 07:20
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Validando una fecha

podria ser algo con strtotime ?
aunque es solo una idea

Código PHP:
if (strtotime(str_replace('/''-'$fecha)) != false) {
    echo 
'fecha valida';

saludos.
  #3 (permalink)  
Antiguo 25/03/2011, 07:27
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: Validando una fecha

Hola amigo proba esto:
esto te muestra 3 campos para dia, mes y año.
se validan con un onchange().
si los tres campos estan bien ingresados te guarda en el campo hidden
una fecha valida para guardarla en la base de datos (date)

Código Javascript:
Ver original
  1. function regExpIntDate(BOX_name){
  2.     if(BOX_name=='dia'){
  3.         var bFound = /^\d+$/.test(document.form.dia.value);
  4.         if(document.form.dia.value>0 && document.form.dia.value<=31){
  5.             var ok=true;
  6.         }
  7.     }else if(BOX_name=='mes'){
  8.         var bFound = /^\d+$/.test(document.form.mes.value);
  9.         if(document.form.mes.value>0 && document.form.mes.value<=12){
  10.             var ok=true;
  11.         }
  12.     }
  13.     else if(BOX_name=='anio'){
  14.         var bFound = /^\d+$/.test(document.form.anio.value);
  15.         if(document.form.anio.value>=2000){
  16.             var ok=true;
  17.         }
  18.     }
  19.     if(bFound && ok){
  20.         document.form.HID_date_start.value=document.form.anio.value+'-'+document.form.mes.value+'-'+document.form.dia.value;
  21.         return true;
  22.         //alert('es int');
  23.     }else{
  24.         if(BOX_name=='dia'){
  25.             document.form.dia.value='';
  26.             alert ('Formato de dia: dd!');
  27.         }
  28.         else if(BOX_name=='mes'){
  29.             document.form.mes.value='';
  30.             alert ('Formato de Mes: mm!');
  31.         }      
  32.         else if(BOX_name=='anio'){
  33.             document.form.anio.value='';
  34.             alert ('Formato de Anio: aaaa!');
  35.         }
  36.         return false;
  37.     }
  38. }

Código HTML:
Ver original
  1. <form action="" name="form" method="post">
  2. <input type="hidden" name="HID_date_start" value="" />
  3. <div class="">* Fecha Inicio:</div>
  4.                     <div class="">
  5.                         Dia: <input onchange="return regExpIntDate('dia');" type="text" id="dia" name="dia" value="" size="2" maxlength="2" />
  6.                         Mes: <input onchange="return regExpIntDate('mes');" type="text" id="mes" name="mes" value=""  size="2" maxlength="2" />
  7.                         A&ntilde;o: <input onchange="return regExpIntDate('anio');" type="text" id="anio" name="anio" value=""  size="4" maxlength="4" />
  8.                     </div>
  9. </form>
  #4 (permalink)  
Antiguo 25/03/2011, 07:29
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Validando una fecha

Claro que me sirve Hidek1 muchas gracias de hecho va muy bien solo se cae cuando pongo 31-02-2005 por decir algo pero checkdate luego ya me lanza que esta erronea y me funciona.
gracias Patriarka pero tu solucion no viene a mi caso se agradece de todas formas :)


Saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Etiquetas: Ninguno
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 15:02.