Foros del Web » Programando para Internet » PHP »

Busqueda de rangos de fechas

Estas en el tema de Busqueda de rangos de fechas en el foro de PHP en Foros del Web. Hola... Tengo un problema con una consulta de fechas en Mysql por ejemplo tengo lo siguiente: Código PHP: $fecha1 ; $fecha2 ; $res  =  mysql_query ...
  #1 (permalink)  
Antiguo 09/01/2012, 09:50
 
Fecha de Ingreso: junio-2011
Mensajes: 43
Antigüedad: 13 años, 6 meses
Puntos: 3
Busqueda de rangos de fechas

Hola...

Tengo un problema con una consulta de fechas en Mysql por ejemplo tengo lo siguiente:

Código PHP:
$fecha1;
$fecha2;

$res mysql_query("SELECT * FROM reportes WHERE fecha between '".$fecha1."' AND '".$fecha2."'"); 
Las dos fechas son ingresadas y se procede a realizar la consulta, sin embargo pasa lo siguiente, tengo la tabla con 4 registros cuyas fechas serian (Y-M-D)
2012-01-01, 2012-01-02, 2012-01-03, 2012-01-04.

Por ejemplo quiero buscar los registros entre las fechas 2012-01-01, 2012-01-03 se supone que me deberia mostrar tres registros, sin embargo me muestra el primero y el segundo, es decir dentro de ese rango no me toma en cuenta la ultima fecha, si busco con un rango entre 2012-01-01, 2012-01-04 me muestra los tres registros antes del ultimo y asi sucesivamente, es decir me hace un rango pero no toma en cuenta la ultima fecha.

Me pregunto si me podrian ayudar con ello o talvez encontrar una manera para sumarle un dia a la ultima fecha para que lo tome en cuenta...
__________________
"Esta es mi firma"
  #2 (permalink)  
Antiguo 09/01/2012, 12:36
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Busqueda de rangos de fechas

De que tipo son los campos en la base? porque puede que tengas problemas con las horas y minutos y segundos, si es un timestamp o un datetime te esta pasando eso
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 09/01/2012, 13:06
Avatar de pzyrichipz  
Fecha de Ingreso: junio-2010
Ubicación: Metepec, Mexico
Mensajes: 66
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: Busqueda de rangos de fechas

Cita:
hey


$res = mysql_query("SELECT * FROM reportes WHERE fecha >='".$fecha1."' AND <='".$fecha2."'");


asi buscas el rango de fecha pero tambien verifica tus campos que no se datetime solo date !!!! :D
  #4 (permalink)  
Antiguo 09/01/2012, 13:08
 
Fecha de Ingreso: junio-2011
Mensajes: 43
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Busqueda de rangos de fechas

Hola linuxzero, pues la fecha es un timestamp
__________________
"Esta es mi firma"
  #5 (permalink)  
Antiguo 09/01/2012, 13:12
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Busqueda de rangos de fechas

Cuando un campo es del tipo timestamp o datetime, te incluye tambien las horas minutos y segundos, al comparar con fechas no es lo mismo 2012-01-28 15:00:00 que 2012-01-28 15:01:00 por eso al calcular un rango tenes que tener en cuenta esto.

Al usar campos timestamp no es tan facil ver esta diferencia, por lo que se recomienda usar datetime que en una consulta de ultima se le puede especificar que agregue 00:00:00 para la hora inicial y 23:59:59 para la hora final cuando se trabajan con rangos
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #6 (permalink)  
Antiguo 09/01/2012, 13:18
 
Fecha de Ingreso: junio-2011
Mensajes: 43
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Busqueda de rangos de fechas

Cita:
Iniciado por pzyrichipz Ver Mensaje
$res = mysql_query("SELECT * FROM reportes WHERE fecha >='".$fecha1."' AND <='".$fecha2."'");


asi buscas el rango de fecha pero tambien verifica tus campos que no se datetime solo date !!!! :D
Gracias por responder

Pues probé lo que me dijiste y no funcionó, despues le agrege esto
$res = mysql_query("SELECT * FROM reportes WHERE fecha >='".$fecha1."' AND fecha <='".$fecha2."'");

y me dio los registros que me daba la sentencia que tenia en un principio osea, aun no me muestra la ultima fecha del rango :/
__________________
"Esta es mi firma"
  #7 (permalink)  
Antiguo 09/01/2012, 13:22
Avatar de pzyrichipz  
Fecha de Ingreso: junio-2010
Ubicación: Metepec, Mexico
Mensajes: 66
Antigüedad: 14 años, 5 meses
Puntos: 5
Respuesta: Busqueda de rangos de fechas

Cita:
Iniciado por karnaldo Ver Mensaje
Gracias por responder

Pues probé lo que me dijiste y no funcionó, despues le agrege esto
$res = mysql_query("SELECT * FROM reportes WHERE fecha >='".$fecha1."' AND fecha <='".$fecha2."'");

y me dio los registros que me daba la sentencia que tenia en un principio osea, aun no me muestra la ultima fecha del rango :/
mira la mejor forma es de que primero lo agas sobre la base de datos y ya veas tu consulta SQL que resultadio te arroja
  #8 (permalink)  
Antiguo 09/01/2012, 13:22
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Busqueda de rangos de fechas

El between anda bien, lo que puso karnaldo es exactamente lo mismo que el between pero escrito de otra manera. Yo lo que te recomiendo es cambiar el tipo de dato de la base a datetime, y hacer las consultas asi:

Código PHP:
Ver original
  1. $res = mysql_query("SELECT * FROM reportes WHERE fecha between '".$fecha1." 00:00:00' AND '".$fecha2." 23:59:59'");
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #9 (permalink)  
Antiguo 09/01/2012, 13:45
 
Fecha de Ingreso: junio-2011
Mensajes: 43
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Busqueda de rangos de fechas

Cita:
Iniciado por linuxzero Ver Mensaje
El between anda bien, lo que puso karnaldo es exactamente lo mismo que el between pero escrito de otra manera. Yo lo que te recomiendo es cambiar el tipo de dato de la base a datetime, y hacer las consultas asi:

Código PHP:
Ver original
  1. $res = mysql_query("SELECT * FROM reportes WHERE fecha between '".$fecha1." 00:00:00' AND '".$fecha2." 23:59:59'");
Muchas gracias por responder
Ya logre resolverlo, no cambie el timestamp por que necesito que se guarde la hora de modificación del registro pero gracias a tu consulta lo logre resolver de 2 maneras, lo cambie un poco porque estoy trabajando con JOOMLA y no php puro.

La tuya:
Código PHP:
$query "SELECT * FROM #__reporte WHERE fecha BETWEEN '$fecha_1 00:00:00' AND '$fecha_2 23:59:59'"
y me funcionó muy bien

y la "dirty way"
Código PHP:
$rangodate("Y-m-d"strtotime("$fecha_2 + 1 day"));
$query "SELECT * FROM #__reporte WHERE fecha BETWEEN '$fecha_1' AND '$rango'"
Las dos funcionan (aunque la segunda seria trampa jajaja), las dejo por si las necesitan. Gracias a los que respondieron :)
__________________
"Esta es mi firma"
  #10 (permalink)  
Antiguo 09/01/2012, 13:49
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 13 años, 1 mes
Puntos: 160
Respuesta: Busqueda de rangos de fechas

Me parece excelente ;) igualmente con datetime podes guardar la hora de la modificacion del registro. solo basta que en la modificacion especifiques al date() que use el formato hora minuto y segundo asi:

Código PHP:
Ver original
  1. date("Y-m-d H:i:s", time());

Abrazo!
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com

Etiquetas: mysql, rangos, registro, tabla, busquedas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:14.