Foros del Web » Programación web » 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: 269
Antigüedad: 10 años, 11 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
Avatar de AlvaroG
/bin/env python
 
Fecha de Ingreso: julio-2005
Ubicación: Canelones, Uruguay
Mensajes: 7.644
Antigüedad: 9 años, 3 meses
Puntos: 590
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.
__________________
blog ElCodiguero
  #3 (permalink)  
Antiguo 05/04/2007, 22:08
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 557
Antigüedad: 12 años, 4 meses
Puntos: 33
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: 269
Antigüedad: 10 años, 11 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 22:50.
SEO by vBSEO 3.3.2