Foros del Web » Programando para Internet » PHP »

Cómo valido una fecha formato aaaa-mm-dd??

Estas en el tema de Cómo valido una fecha formato aaaa-mm-dd?? en el foro de PHP en Foros del Web. Pues eso que llevo mucho tiempo buscando alguna solución en php y no veo nada, solo en javascript que no consigo hacerlo funcionar así que ...
  #1 (permalink)  
Antiguo 23/09/2004, 14:08
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
Cómo valido una fecha formato aaaa-mm-dd??

Pues eso que llevo mucho tiempo buscando alguna solución en php y no veo nada, solo en javascript que no consigo hacerlo funcionar así que prefiero en php. Necesito de una variable pasada por un formulario, comprobar que está en formato aaaa-mm-dd

He visto esta función pero no me sirve no se por qué:
Código:
function check_date($str){ /// dead useful when validating between mysql and php date formats
                trim($str);
                if(!preg_match("/^(d){1,4}-(d){1,2}-(d){1,4}+$/i",$str)){
                              return false;
                }
                # check that the date is valid
                if(preg_match("/^(d){1,4}-(d){1,2}-(d){1,2}+$/i",$str)){
                              list($year,$month,$day)=explode("-",$str);
                }elseif(preg_match("/^(d){1,2}-(d){1,2}-(d){1,4}+$/i",$str)){
                              list($day,$month,$year)=explode("-",$str);
                }
                if(!checkdate($month,$day,$year)){
                              return false;
                }
                return true;
}
Alguna ayudita por favor??

graciasss
  #2 (permalink)  
Antiguo 23/09/2004, 14:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Más sencilloo y efectivo que comprobar la sintax de tu fecha sería comprobar si la fecha indicada es real (según calendario)

Para eso, .. desglosa tu fecha en sus partes: año, mes y día usando explode() al caracter de separador que usas (el -) y de ahí montas tu fecha sobre chekdate()

más info:
http://www.php.net/explode
http://www.php.net/checkdate

Si tu esperas ese formato (aaaa-mm-dd) y yo intruzco otra cosa o bien me equivoco y pongo en "mes" un numero o en día (para ese mes) que no corresponde .. la función checkdate() hará su parte al validar la fecha (según calendario).


Un saludo,
  #3 (permalink)  
Antiguo 23/09/2004, 16:33
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
mmm me parece bien la idea pero hay problemillas. El código lo he hecho para dd-mm-aaaa que ahora que lo pienso me viene mejor:

Código:
function check_date($str){ 
                trim($str);
                $trozos = explode ("-", $str);
                $dia=$trozos[0];
                
                $mes=$trozos[1];
                
                $año=$trozos[2];
                    
                if(checkdate ($mes,$dia,$año)){
                return true;
                }
                else{
                return false;
                }
}
Me dá error cuando meto texto, en la línea "if(checkdate ($mes,$dia,$año)){"
Otra cosa, imagina que me meten la entrada: 2004-1-1 Esa entrada debería de dar error ya que quiero el formato de dos dígitos siempre para mes y día, y cuatro para año, eso no lo hace esa función, así que me dá que necesito algo de comprobación de formato...

Última edición por apañero; 23/09/2004 a las 17:07
  #4 (permalink)  
Antiguo 23/09/2004, 17:05
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 21 años, 5 meses
Puntos: 4
los arrays autonumericos se cuentan desde cero:

Código PHP:
function check_date($str){
                
trim($str);
                
$trozos explode ("-"$str);
                
$año=$trozos[0];
                
$mes=$trozos[1];
                
$dia=$trozos[2];     
                if(
checkdate ($mes,$dia,$año)){
                return 
true;
                }
                else{
                return 
false;
                }


Última edición por ArrauKano; 23/09/2004 a las 17:06
  #5 (permalink)  
Antiguo 23/09/2004, 17:08
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
si me he dado cuenta, justo acababa de editar mi mensaje. arriba describo los 2 problemas que tengo...
  #6 (permalink)  
Antiguo 24/09/2004, 07:22
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
una ayudita pleazzz
  #7 (permalink)  
Antiguo 24/09/2004, 07:29
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,
Cita:
Me dá error cuando meto texto, en la línea "if(checkdate ($mes,$dia,$año)){"
¿Cual es el mensaje de error? ¿A que te refieres 'con cuando meto texto'? Pon un ejemplo.
Cita:
Otra cosa, imagina que me meten la entrada: 2004-1-1 Esa entrada debería de dar error ya que quiero el formato de dos dígitos siempre para mes y día, y cuatro para año, eso no lo hace esa función, así que me dá que necesito algo de comprobación de formato...
Esa fecha es una fecha valida. Si lo que quieres es forzar el numero de digitos, tendras que validar el formato con expresiones regulares.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 24/09/2004, 08:06
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
buenas josemi, me dá error en esa línea al meter caracteres en el campo de texto del formulario, digo yo que porque no se le pueden pasar caracteres, por eso quiero antes una comprobación del formato.

Lo que quiero es que antes de esa funcion checkdate de comprobar fecha válida , haya una comprobación de que lo que se meten son caraceres y en el formato exacto de dd-mm-aaaa (así además creo que no habría error posible)

No sé hacerlo así que agradecería mucho una ayudita.

thenkiusss
  #9 (permalink)  
Antiguo 24/09/2004, 08:22
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Ya, con "caracteres" te refieres a "caracteres no numericos". Problemas de semantica.

Para validar el formato, usa expresiones regulares. No son mi fuerte, pero algo como
Código PHP:
if (0==preg_match('/\d{2}-\d{2}-\d{4}/')) {
  echo 
'no valido';

No se si es correcto, pero creo que fuerza a que sea 2 digitos, guion, 2 digitos, guion, 4 digitos. Eso si, 99-99-9999 pasaria este test (lo detectaria checkdate()).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 26/09/2004, 17:44
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
mm no me filtra bien los caracteres que no son número o lo pongo yo mal.

La expresión que tengo, siendo $str la cadena a comprobar es:

Código:
if (0==preg_match('/\d{2}-\d{2}-\d{4}/', $str))
 return false; 
                } 
else{

.....
.....
  #11 (permalink)  
Antiguo 01/10/2004, 20:14
 
Fecha de Ingreso: abril-2004
Mensajes: 310
Antigüedad: 20 años
Puntos: 0
una ayudita....
  #12 (permalink)  
Antiguo 18/12/2015, 16:42
 
Fecha de Ingreso: febrero-2015
Mensajes: 9
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Cómo valido una fecha formato aaaa-mm-dd??

Creo que ay una funcion del tipo IS_numeric($variable) y te devuelve vaya si es numero. creo que para este caso es mas facil que una regulñar expression... ya se que este post es viejo solo por si alguien como yo anda viendo que pex por aca ..
Saludos Gente
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:09.