Blog de conocimiento gratuito: linux, programación, open source, bases de datos, android, frameworks, web e informática en general.
En ocasiones necesitamos hacer consultas o queries en MySQL con PHP usando fechas. Por ejemplo, consultar las ventas de hoy, o las ventas del mes.
También puede que necesitemos consultar con fechas en un rango, ya sea un año, de hoy, de unas horas, etcétera.
Por ello es que vengo a mostrar hoy cómo hacer consultas con fechas en MySQL usando date y strtotime.
Tomemos un ejemplo sencillo de ventas en donde tenemos una tabla de ventas que tiene la fecha y hora en la que la misma fue realizada. Al consultar todos los datos se ve así:
Ahora veremos cómo consultar con determinadas fechas. Veamos el ejemplo para consultar las ventas del día 6 de noviembre del 2019.
Lo único que necesitamos son dos fechas: la del inicio y la del fin. La de inicio la proporciona el usuario o nosotros tomamos la fecha de hoy con:
$fecha = date("Y-m-d") . " 00:00:00";
Así tenemos la fecha de medianoche del inicio. Algo como 2019-11-06 00:00:00
Ahora el “problema” radica en el día siguiente, pues debemos consultar todas las del día, sin pasarnos y sin que nos falte (incluso si una venta se hizo a las 23:59)
Para ello, usamos strtotime
y obtenemos la fecha del siguiente día, así:
La magia para sumar fechas es usar strtotime
y +1 day
tomando como fecha para los cálculos la fecha de inicio.
Ahora que ya tenemos ambas fechas podemos hacer la consulta así (fíjate que primero es >=
y después es <
):
De modo que tome todas las fechas de hoy pero cuya fecha no sea mayor ni igual a mañana. Como las fechas se toman como cadena, el orden será respetado.
Con la siguiente salida:
Así que si usamos PDO con una conexión así:
La consulta quedaría algo así:
De esa manera evitamos inyecciones SQL y hacemos una consulta por fecha. Con este enfoque podríamos tomar meses, días, años, etcétera.