Foros del Web » Programando para Internet » PHP »

Consulta rango entre 2 fechas!!!...

Estas en el tema de Consulta rango entre 2 fechas!!!... en el foro de PHP en Foros del Web. Hola a todos!!! Eh tenido un problema con una consulta, verán tengo tres registros, uno de ellos es la fecha en la que un trabajador ...
  #1 (permalink)  
Antiguo 06/09/2011, 13:18
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 3 meses
Puntos: 1
Información Consulta rango entre 2 fechas!!!...

Hola a todos!!! Eh tenido un problema con una consulta, verán tengo tres registros, uno de ellos es la fecha en la que un trabajador se registra en una empresa... ahora bien, la consulta se trata de mostrar el rango de 2 fechas que yo meto en un campo de texto con el datepicker... si me muestra el rango de meses y días pero me muestra también en el rango todos los años que encuentra en los mismos días, es decir, si quiero los trabajadores registrados del 08/03/2011 (3 de agosto del 2011) al 08/15/2011 (15 de agosto del 2011) no solo me genera los de ese año, si no también los del 2008, 2009 y 2010... ... aqui les dejo el codigo para compartirles un poco de mis frustración :s...


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" href="css/sunny/jquery-ui-1.8.13.custom.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.13.custom.min.js"></script>
<script type="text/javascript">

$(function() {
$( ".datepicker" ).datepicker();
});
</script>
<body>
<form id="form" name="form" method="post">
Fecha Inicio:
<input type="text" name="fechaIni" class="datepicker">
<br>
Fecha Final:
<input type="text" name="fechaFin" class="datepicker">
<br>
<input type="submit" value="Consultar">
</form>
<h1>Consultas</h1>

<?php
$fechaIni=$_POST['fechaIni'];
$fechaFin=$_POST['fechaFin'];


$conectar=mysql_connect('localhost','root','');
if($conectar=NULL)
{
printf("Error al conectar a la Base de datos");
}

mysql_select_db('registro');

$resultado=mysql_query("SELECT RPEREGASIS, FECREGASIS, MIN( HORREGASIS ) AS entrada, MAX( HORREGASIS ) as salida
FROM registro WHERE DATE_FORMAT(FECREGASIS,'%m/%d/%Y') BETWEEN '$fechaIni' AND '$fechaFin' GROUP BY RPEREGASIS, FECREGASIS");

if($row=mysql_fetch_array($resultado)){
echo "<table border='1' align='center'>\n";
echo "<tr><td>RPE Del Empleado</td><td>Fecha de Registro</td><td>Hora de Entrada</td><td>Hora de Salida</td></tr>\n";
do{

echo "<tr><td>".$row["RPEREGASIS"]."</td><td>".$row["FECREGASIS"]."</td><td>".$row["entrada"]."</td><td>".$row["salida"]."</td></tr> \n";
}while($row=mysql_fetch_array($resultado));
echo "</table>\n";
}
else{
echo "<center>No se ha encontrado ningun registro con este código...</center>";
}

?>


</body>
</html>
  #2 (permalink)  
Antiguo 06/09/2011, 13:24
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Consulta rango entre 2 fechas!!!...

Probá imprimir esto:

Código SQL:
Ver original
  1. SELECT RPEREGASIS, FECREGASIS, MIN( HORREGASIS ) AS entrada, MAX( HORREGASIS ) AS salida
  2. FROM registro WHERE DATE_FORMAT(FECREGASIS,'%m/%d/%Y') BETWEEN '$fechaIni' AND '$fechaFin' GROUP BY RPEREGASIS, FECREGASIS

y pegalo acá para saber como lo está tomando...
  #3 (permalink)  
Antiguo 06/09/2011, 13:55
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta rango entre 2 fechas!!!...

Esa es la misma consulta que tengo... y pues bueno lo que me genera es esto:


RPE Del Empleado Fecha de Registro Hora de Entrada Hora de Salida
** 2010-08-05 ***TRI ***TRI
** 2011-08-03 ***TRI ***TRI
***TR 2008-08-04 ***TRI ***TRI
***TR 2008-08-05 ***TRI ***TRI
***TR 2008-08-06 ***TRI ***TRI
***TR 2009-08-04 ***TRI ***TRI
***TR 2009-08-05 ***TRI ***TRI
***TR 2009-08-06 ***TRI ***TRI
***TR 2010-08-04 ***TRI ***TRI
***TR 2010-08-05 ***TRI ***TRI
***TR 2010-08-06 ***TRI ***TRI
***TR 2011-08-03 ***TRI ***TRI
***TR 2011-08-04 ***TRI ***TRI
***TR 2011-08-05 ***TRI ***TRI
***TR 2011-08-06 ***TRI ***TRI
  #4 (permalink)  
Antiguo 06/09/2011, 14:00
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Consulta rango entre 2 fechas!!!...

jaja ya sé que es la misma, pero quiero ver el resultado NO LA CONSULTA. A ver si lo entendés así, hace esto así se puede ver que pasa:

Código PHP:
Ver original
  1. $sql = "SELECT RPEREGASIS, FECREGASIS, MIN( HORREGASIS ) AS entrada, MAX( HORREGASIS ) as salida
  2. FROM registro WHERE DATE_FORMAT(FECREGASIS,'%m/%d/%Y') BETWEEN '$fechaIni' AND '$fechaFin' GROUP BY RPEREGASIS, FECREGASIS";
  3.  
  4. echo $sql;

Lo que quiero ver es el resultado de ese echo..
  #5 (permalink)  
Antiguo 06/09/2011, 14:02
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 10 meses
Puntos: 81
Respuesta: Consulta rango entre 2 fechas!!!...

Limitala en la consulta agregandole el año:
Código PHP:
Ver original
  1. "WHERE YEAR(fecha) = YEAR($añodeFecha)"

Ten en cuenta que datepicker deja la fecha en formato dd-mm-yyyy por defecto y mysql trabaja con la fecha al reves.

Saludos!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #6 (permalink)  
Antiguo 06/09/2011, 14:06
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Consulta rango entre 2 fechas!!!...

Cita:
Iniciado por Marvin Ver Mensaje
Limitala en la consulta agregandole el año:
Código PHP:
Ver original
  1. "WHERE YEAR(fecha) = YEAR($añodeFecha)"

Ten en cuenta que datepicker deja la fecha en formato dd-mm-yyyy por defecto y mysql trabaja con la fecha al reves.

Saludos!
Te corrijo, tenés un pequeño error, sería así:

Código SQL:
Ver original
  1. "WHERE YEAR(fecha) = $añodeFecha"

  #7 (permalink)  
Antiguo 06/09/2011, 14:08
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta rango entre 2 fechas!!!...

Gracias Walterdevel, mira esto es lo que me arroja despues de meterle las dos fechas del datepicker:

Resource id #5

Y disculpa por no entender xD es que soy un novatillo en esto n_n...

Ok gracias Marvin mientras intentaré con lo que me dijiste, solo incluiria ese WHERE a la consulta que ya tengo no?? supongo que solo agregandole un "AND" al WHERE que ya tenía??...
  #8 (permalink)  
Antiguo 06/09/2011, 14:20
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Consulta rango entre 2 fechas!!!...

No lo puedo ver con eso, necesito que sea solo la sql:

Cambiarías:

Código PHP:
Ver original
  1. $resultado=mysql_query("SELECT RPEREGASIS, FECREGASIS, MIN( HORREGASIS ) AS entrada, MAX( HORREGASIS ) as salida
  2. FROM registro WHERE DATE_FORMAT(FECREGASIS,'%m/%d/%Y') BETWEEN '$fechaIni' AND '$fechaFin' GROUP BY RPEREGASIS, FECREGASIS");

por esto:

Código PHP:
Ver original
  1. $sql ="SELECT RPEREGASIS, FECREGASIS, MIN( HORREGASIS ) AS entrada, MAX( HORREGASIS ) as salida
  2. FROM registro WHERE DATE_FORMAT(FECREGASIS,'%m/%d/%Y') BETWEEN '$fechaIni' AND '$fechaFin' GROUP BY RPEREGASIS, FECREGASIS";
  3. $resultado=mysql_query($sql);
  4. echo "ESTA ES LA SQL:".$sql;

Por otro lado en tu sql hace un date format antes de between, podrías intentar también cambiar tu sql por esta:

Código PHP:
Ver original
  1. $sql ="SELECT RPEREGASIS, FECREGASIS, MIN( HORREGASIS ) AS entrada, MAX( HORREGASIS ) as salida
  2. FROM registro WHERE FECREGASIS BETWEEN '$fechaIni' AND '$fechaFin' GROUP BY RPEREGASIS, FECREGASIS";
  #9 (permalink)  
Antiguo 06/09/2011, 14:22
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta rango entre 2 fechas!!!...

Pues me marca un error en la consulta cuando le agrego esa parte, $añodeFecha la tengo como agregar como variable?? Y si es asi que parámetro le pongo?? Por que solo tengo 2 fechas la inicial y la final, de antemano gracias y disculpen por tanta pregunta :s...
  #10 (permalink)  
Antiguo 06/09/2011, 14:26
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Consulta rango entre 2 fechas!!!...

Hiciste lo que te dije en el post anterior? Con eso podemos saber que pasa...
  #11 (permalink)  
Antiguo 06/09/2011, 14:27
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta rango entre 2 fechas!!!...

Pues lo que me arroja el Sql es esto, después de ingresarle las fechas a la caja de texto:



ESTA ES LA SQL:SELECT RPEREGASIS, FECREGASIS, MIN( HORREGASIS ) AS entrada, MAX( HORREGASIS ) as salida FROM registro WHERE DATE_FORMAT(FECREGASIS,'%m/%d/%Y') BETWEEN '08/02/2011' AND '08/05/2011' GROUP BY RPEREGASIS, FECREGASIS

RPE Del Empleado Fecha de Registro Hora de Entrada Hora de Salida
** 2010-08-05 ***TRI ***TRI
** 2011-08-03 ***TRI ***TRI
***TR 2008-08-03 ***TRI ***TRI
***TR 2008-08-04 ***TRI ***TRI
***TR 2008-08-05 ***TRI ***TRI
***TR 2009-08-03 ***TRI ***TRI
***TR 2009-08-04 ***TRI ***TRI
***TR 2009-08-05 ***TRI ***TRI
***TR 2010-08-03 ***TRI ***TRI
***TR 2010-08-04 ***TRI ***TRI
***TR 2010-08-05 ***TRI ***TRI
***TR 2011-08-02 ***TRI ***TRI
***TR 2011-08-03 ***TRI ***TRI
***TR 2011-08-04 ***TRI ***TRI
***TR 2011-08-05 ***TRI ***TRI
  #12 (permalink)  
Antiguo 06/09/2011, 14:31
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Consulta rango entre 2 fechas!!!...

Tus fechas están mal formateadas, fijate:

Cita:
BETWEEN '08/02/2011' AND '08/05/2011'
El formato debe ser 2011-08-02.

Te paso una función para solucionarlo:

Código PHP:
Ver original
  1. function js2PhpTime($jsdate){
  2.   if(preg_match('@(\d+)/(\d+)/(\d+)\s+(\d+):(\d+)@', $jsdate, $matches)==1){
  3.     $ret = mktime($matches[4], $matches[5], 0, $matches[1], $matches[2], $matches[3]);
  4.     //echo $matches[4] ."-". $matches[5] ."-". 0  ."-". $matches[1] ."-". $matches[2] ."-". $matches[3];
  5.   }else if(preg_match('@(\d+)/(\d+)/(\d+)@', $jsdate, $matches)==1){
  6.     $ret = mktime(0, 0, 0, $matches[1], $matches[2], $matches[3]);
  7.     //echo 0 ."-". 0 ."-". 0 ."-". $matches[1] ."-". $matches[2] ."-". $matches[3];
  8.   }
  9.   return $ret;
  10. }
  11.  
  12. echo date("Y-m-d", js2PhpTime('08/02/2011'));

( obtenida del wcalendar )
  #13 (permalink)  
Antiguo 06/09/2011, 14:38
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta rango entre 2 fechas!!!...

Ahhhhh ok! Pensé que el DATE_FORMAT de MySQL te hacía esto... y te los comparaba... y la función se la agrego a mis variables $fechaIni y $fechaFin verdad??... Ala muchas gracias, deja lo pruebo a ver que pasa...
  #14 (permalink)  
Antiguo 06/09/2011, 14:47
 
Fecha de Ingreso: diciembre-2010
Mensajes: 788
Antigüedad: 14 años
Puntos: 51
Respuesta: Consulta rango entre 2 fechas!!!...

Si si, a esas variables. Suerte!
  #15 (permalink)  
Antiguo 07/09/2011, 07:40
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: Consulta rango entre 2 fechas!!!...

Ala beisbooooooooooooooooooooool!!! Muchísimas gracias, ya quedo aqui esta el código ya funcionando, soy tan feliz T_T...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" href="css/sunny/jquery-ui-1.8.13.custom.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.13.custom.min.js"></script>
<script type="text/javascript">

$(function() {
$( ".datepicker" ).datepicker();
});
</script>
<body>
<form id="form" name="form" method="post">
Fecha Inicio:
<input type="text" name="fechaIni" class="datepicker">
<br>
Fecha Final:
<input type="text" name="fechaFin" class="datepicker">
<br>
<input type="submit" value="Consultar">
</form>
<h1>Consultas</h1>

<?php
function js2PhpTime($jsdate){
if(preg_match('@(\d+)/(\d+)/(\d+)\s+(\d+):(\d+)@', $jsdate, $matches)==1){
$ret = mktime($matches[4], $matches[5], 0, $matches[1], $matches[2], $matches[3]);
//echo $matches[4] ."-". $matches[5] ."-". 0 ."-". $matches[1] ."-". $matches[2] ."-". $matches[3];
}else if(preg_match('@(\d+)/(\d+)/(\d+)@', $jsdate, $matches)==1){
$ret = mktime(0, 0, 0, $matches[1], $matches[2], $matches[3]);
//echo 0 ."-". 0 ."-". 0 ."-". $matches[1] ."-". $matches[2] ."-". $matches[3];
}
return $ret;
}
$fechaIni=$_POST['fechaIni'];
$fechaFin=$_POST['fechaFin'];
//$fechaMySQLFin = $_POST[implode( '-', array_reverse( explode( '/', $fechaFin ) ) )] ;
$Inicio=date("Y-m-d", js2PhpTime($fechaIni));
$Final=date("Y-m-d", js2PhpTime($fechaFin));
$conectar=mysql_connect('localhost','root','');
if($conectar=NULL)
{
printf("Error al conectar a la Base de datos");
}

mysql_select_db('registro');
echo $fechaIni;
$resultado=mysql_query("SELECT RPEREGASIS, FECREGASIS, MIN( HORREGASIS ) AS entrada, MAX( HORREGASIS ) as salida
FROM registro WHERE FECREGASIS='$Inicio' OR BETWEEN '$Inicio' AND '$Final' GROUP BY RPEREGASIS, FECREGASIS");

if($row=mysql_fetch_array($resultado)){
echo "<table border='1' align='center'>\n";
echo "<tr><td>RPE Del Empleado</td><td>Fecha de Registro</td><td>Hora de Entrada</td><td>Hora de Salida</td></tr>\n";
do{

echo "<tr><td>".$row["RPEREGASIS"]."</td><td>".$row["FECREGASIS"]."</td><td>".$row["entrada"]."</td><td>".$row["salida"]."</td></tr> \n";
}while($row=mysql_fetch_array($resultado));
echo "</table>\n";
}
else{
echo "<center>No existen registros para el rango de esas fechas</center>";
}

?>


</body>
</html>
  #16 (permalink)  
Antiguo 24/11/2012, 19:34
 
Fecha de Ingreso: abril-2010
Mensajes: 52
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Consulta rango entre 2 fechas!!!...

Tengo un problema con la aplicación "datepicker jQuery
Obtengo un resultado de una consulta 'mysql' de fechas que no estan disponibles y que no quiero que aparezcan en el calendario datapicker de jquery

El código que tengo es el siguiente:

<?php
mysql_select_db($database_cnxFantastic, $cnxFantastic);
$result=mysql_query("select data from xxxxxx WHERE xxxxxx='n'");
while($row = mysql_fetch_array($result)) {
$fecha1=$row["data"];
$fecha2=date("m-d-Y",strtotime($fecha1));
printf(%s, $fecha2);
}
mysql_free_result($result);
?>
<script type="text/javascript">
$(function() {
var disabledDays = ['????????????'];
function disableAllTheseDays(date) {
var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
for (i = 0; i < disabledDays.length; i++) {
if($.inArray((m+1) + '-' + d + '-' + y,disabledDays) != -1) {
return [false];
}
}
return [true];
}



Gracias de antemano por la ayuda,

Etiquetas: fecha, mysql, rango
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 19:49.