Foros del Web » Programando para Internet » PHP »

Expresion regular para fechas

Estas en el tema de Expresion regular para fechas en el foro de PHP en Foros del Web. Hola. Necesito controlar una fecha con el formato dd-mm-yyyy para que no sucedan cosas como que alguien pueda poner 31-04-2008. El intervalo en el que ...
  #1 (permalink)  
Antiguo 05/04/2007, 18:01
Avatar de Pip
Pip
 
Fecha de Ingreso: noviembre-2003
Ubicación: Málaga
Mensajes: 280
Antigüedad: 20 años, 5 meses
Puntos: 0
Expresion regular para fechas

Hola.

Necesito controlar una fecha con el formato dd-mm-yyyy para que no sucedan cosas como que alguien pueda poner 31-04-2008. El intervalo en el que controlo las fechas es entre 01-01-2007 y el 31-12-2009.

Uso la función preg_match para ello y mi expresión regular actual que no controla lo que quiero, es la siguiente:

Código PHP:
            $expr_reg="/([0][1-9]|[1-2][0-9]|[3][0-1])-([0][1-9]|[1][0-2])-([2][0][0][7-9])/"
Con la expresión regular quisiera controlar que las fechas sean correctas, salvo para febrero en años bisiestos. ¿Alguien sabe cómo realizarla?
__________________
por Pip
  #2 (permalink)  
Antiguo 05/04/2007, 21:54
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresion regular para fechas

No es necesario que hagas cosas como [X], basta poner simplemente X:
[0][1-9]|[1-2][0-9]|[3][0-1])-([0][1-9]|[1][0-2])-([2][0][0][7-9]

puede escribirse como

(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-(200[7-9])

Se me ocurre que una forma rápida puede ser:
1.- usar mktime para convertir la fecha que te pasan a una marca de tiempo, con hora 0, sea este valor $tiempo
2.- dividir cada parte de la cadena de fecha que te pasaron, supongamos $dia, $mes y $anio

si $dia.'-'.$mes.'-'.$anio != date("d-m-Y", $tiempo)

entonces han introducido una fecha no válida. ¿Por qué? Porque mktime acepta cosas como 32/1/2007, pero las convierte (en este caso) a 1/2/2007. Ergo, si la fecha está mal, te la va a convertir a otra fecha.

Saludos.
  #3 (permalink)  
Antiguo 05/04/2007, 22:08
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: Expresion regular para fechas

De pura casualidad no te serviria la funcion checkdate?

Eso revisará que sea una fecha valida.. ya despues compruebas que este dentro del rango que buscas.. como? yo lo haria de esta forma (la primera que se me ocurrio)

Código PHP:
$inicio mktime(000112007); //01-01/2007
$fin mktime(00012312009); //31-12/2009

list($d$m$y) = explode("-"$tufecha); //$tufecha es.. tu fecha xD.. ya cuando ha pasado por la validacion
$fecha mktime(000$m$d$y); //esta será la fecha que introdujeron
if ($fecha $inicio && $fecha $fin) {
echo 
"Esta dentro del rango correcto";
}else{
echo 
"No esta dentro del rango";

__________________
Sin Ideas
  #4 (permalink)  
Antiguo 06/04/2007, 06:52
Avatar de Pip
Pip
 
Fecha de Ingreso: noviembre-2003
Ubicación: Málaga
Mensajes: 280
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Expresion regular para fechas

Muchas gracias por ambas soluciones, no sé cual de las dos implementaré pero ambas parecen válidas.
__________________
por Pip
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 04:47.