Los que trabajamos en PHP conocemos que es algo engorroso trabajar con fechas sino es con alguna clase hecha que se encargue de todo. Pero aveces no encontramos la que necesitamos.
El formato timestamp de unix es sencillo de usar pero limitado en el rango que abarca, este va desde 1970 hasta el 2038 en Windows y va desde 1901 hasta 2038 en Unix. Por lo que trabajar con fechas anteriores o posteriores da errores.
Para esto, hay varias soluciones que van desde librerÃas con timestamps más amplios hasta trabajar con otro formato como por ejemplo el DATETIME de MySQL.
Este tip apunta obtener los registros cuyo campo “campoFecha” en formato DATETIME, está entre un rango de años determinado.
Para sacar registros cuyo campo ‘campoFecha’ está dentro de un rango que va desde el 1789 hasta el 2000 podrÃamos hacerlo simplemente de este modo:
SELECT * FROM tuTabla WHERE DATEDIFF('1789',campoFecha) < 0 AND DATEDIFF('2000',casmpoFecha) > 0
DATEDIFF('fecha1','fecha2') saca la diferencia de la primer fecha respecto a la segunda. Por lo que si la fecha1 es mayor a la fecha2 el número da positivo y, por el contrario, si fecha1 es menor a fecha2 el número resultante da negativo.
Entonces, si tenemos que el registro tiene una fecha mayor a 1978 y esa fecha es menor a 2000, lo selecciona. Se pueden usar también >= o <= para incluir la fecha lÃmite.
Lamentablemente, la función DATEDIFF funciona a partir de la versión MySQL 4.1.1. y muchos de los servicios de hosting actuales disponen de versiones anteriores de este motor de base de datos.
Entonces una de las alternativas para versiones de MySQL inferiores podrÃa ser la siguiente:
SELECT * FROM tuTabla WHERE TO_DAYS(’1978′) – TO_DAYS(‘campoFecha’) < 0 AND TO_DAYS('2000') - TO_DAYS(campoFecha) <= 0
TO_DAYS('año') devuelve la cantidad de dÃas desde el año 0 hasta ese mismo año. Por lo que la diferencia darÃa positivo o negativo según los valores restados.










Un comentario
diseño web
septiembre 18th, 2009 at 3:22 am
Gracias por el tip, lo tendre en cuenta