Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Comparar si dos horas se cruzan entre si

Estas en el tema de Comparar si dos horas se cruzan entre si en el foro de Mysql en Foros del Web. Hola que tal, soy principiante en programacion y base de datos, estoy trabajando con PHP y Mysql... le estado dando vueltas a un codigo, pero ...
  #1 (permalink)  
Antiguo 09/09/2010, 14:23
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 13 años, 7 meses
Puntos: 1
Comparar si dos horas se cruzan entre si

Hola que tal, soy principiante en programacion y base de datos, estoy trabajando con PHP y Mysql...

le estado dando vueltas a un codigo, pero no logró concretar la solucion.

tengo una tabla en la base de datos llamada "actividades", uno de sus campos son: Hora_Inicio y Hora_Termino, ahi se guardan diferentes horas como:

Hora_Inicio = 10:00
Hora_Termino = 15:00

Los campos son "Time".

Lo que quiero es saber es si hay actividades, donde sus respectiva "Hora_Inicio" y "Hora_Termino" se cruzan entre si. Es lo que me interesa. Poder mandar a llamar dos actividades y saber si sus horarios se cruzan entre si.

Logro jalar la informacion con un while y mysql_fetch_object, y q las imprima asi en lista, pero no puedo compararlas entre si...

¿alguna idea o sugerencia?
  #2 (permalink)  
Antiguo 09/09/2010, 15:34
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Comparar si dos horas se cruzan entre si

Mira este post.

Puede darte ideas de como afrontar el problema.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 09/09/2010, 17:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Comparar si dos horas se cruzan entre si

Cita:
Iniciado por huesos52 Ver Mensaje
Mira este[URL="http://www.forosdelweb.com/f86/comparar-si-dos-horas-cruzan-entre-si-840810/f86/consu...-horas-708380/"][B] post.[/B][/URL]

Puede darte ideas de como afrontar el problema.

saludos
Hola huesos52, gracias por responder.
Dice que la pagina no existe :S , o no sé si es el enlace que esta incorrecto,

saludos.
  #4 (permalink)  
Antiguo 10/09/2010, 05:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Comparar si dos horas se cruzan entre si

Se le cortó el link...

http://www.forosdelweb.com/f86/consu...-horas-708380/
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 12/09/2010, 02:04
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 18 años, 10 meses
Puntos: 79
Respuesta: Comparar si dos horas se cruzan entre si

Si solo quieres saber el cruce, o sea si hay mas de uno:

SELECT COUNT(campo) as Q FROM actividades WHERE Hora_Inicio>="10:00:00" AND Hora_Termino<="15:00:00" GROUP BY Hora_Inicio>="10:00:00",Hora_Termino<="15:00:00"

luego viene la conexion, con la query, etc...

$cruce=$row["Q"];

if($cruce>1) print "hay cruce";

salu2


otra forma es

SELECT campo FROM actividades WHERE Hora_Inicio>="10:00:00" AND Hora_Termino<="15:00:00"

luego aplicas un mysql_num_rows y listo
  #6 (permalink)  
Antiguo 12/09/2010, 16:05
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Comparar si dos horas se cruzan entre si

Muchas Gracias gnzsoloyo, lo checaré! y te comento :D

Perr0, igualmente muchas gracias, aunque creo que le haré unas modificaciones, puesto que si detecta los cruzes..pero por ejemplo:

- Si mi hora a comparar es: 08:00 a 14:00 hrs

y tengo estas otras:

07:00 - 14:00 Hrs
09:00 - 14:00 Hrs
08:00 - 13:00 Hrs

TODAS esas horas se cruzan o enciman con la comparada (08:00 a 14:00 Hrs), pero la primera de 07:00 a 14:00 no la detecta.... porque solo verifica las q son mayores de 08:00.., pero esa de 07:00 a 14:00 pues tambien se encima.

osea, no podrias realizar esas dos actividades porque aun así se cruzan..

gracias, perr0, verificaré y te comento!
saludos.

cualquier comentario lo agardeceré, saludos.
  #7 (permalink)  
Antiguo 12/09/2010, 16:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Comparar si dos horas se cruzan entre si

Lo único que necesitas es saber si la hora de inicio de la nueva está entremedio de alguna de las que ya están o si la hora de fin de la nueva lo está.
Eso te dará la respuesta.

Algo así te devolvería 1 si hay algún cruzamiento entre el valor de horainicial u horafinal, contra alguno de los horarios que figuren en la tabla. Si devuelve cero, no se cruza con ninguna.
Código MySQL:
Ver original
  1. SELECT COUNT(*) cruzadas
  2. FROM tabla T
  3.   (horainicial BETWEEN Hora_Inicio AND Hora_Fin)
  4.   OR
  5.   (horafinal BETWEEN Hora_Inicio AND Hora_Fin);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 12/09/2010, 16:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Comparar si dos horas se cruzan entre si

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Lo único que necesitas es saber si la hora de inicio de la nueva está entremedio de alguna de las que ya están o si la hora de fin de la nueva lo está.
Eso te dará la respuesta.

Algo así te devolvería 1 si hay algún cruzamiento entre el valor de horainicial u horafinal, contra alguno de los horarios que figuren en la tabla. Si devuelve cero, no se cruza con ninguna.
Código MySQL:
Ver original
  1. SELECT COUNT(*) cruzadas
  2. FROM tabla T
  3.   (horainicial BETWEEN Hora_Inicio AND Hora_Fin)
  4.   OR
  5.   (horafinal BETWEEN Hora_Inicio AND Hora_Fin);

Hola gnzsoloyo, buen dia!
Pero fijate que tambien habria que tomar en cuenta algo....

¿que tal si la hora a comparar es:
06:00 a 17:00 Hrs (a esa hora quieres prácticar FUTBOL)

y todas las demas (con las que se comparará) son las ya mencionadas:


HORARIO ACTIVIDAD

07:00 - 14:00 Hrs Estudiar
09:00 - 14:00 Hrs Trabajar
08:00 - 13:00 Hrs Descansar
(*solo por asignarles una actividad cualquiera)

Ni la hora de inicio, ni la hora de fin están en esos rangos, pero aun así, se cruzan :S ..puesto que la hora comparada te ocupa toodos los demas horarios....,
osea, no podrias practicar NINGUNA actividad porque el FUTBOL ya te ocupa toodas esas horas..
Ahi el sistema diría: "Usted no puede practicar futbol puesto que el horario ya está ocupado" ó "Usted no puede estudiar, trabajar o descansar puesto que a esas horas tiene practicas de futbol"

me explico? :P

Gracias nuevamente!!!
  #9 (permalink)  
Antiguo 12/09/2010, 17:08
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 18 años, 10 meses
Puntos: 79
Respuesta: Comparar si dos horas se cruzan entre si

codigouserphp, no se si ocupaste el codigo de gnzsoloyo, pero me parece que toma bien las directivas, otra forma de escribir lo mismo seria:

para caso 1:
SELECT campo FROM actividades WHERE (Hora_Inicio>="10:00:00" AND Hora_Inicio<="15:00:00") OR (Hora_Termino>="10:00:00" AND Hora_Termino<="15:00:00")

para caso 2:
SELECT campo FROM actividades WHERE (Hora_Inicio>="08:00:00" AND Hora_Inicio<="14:00:00") OR (Hora_Termino>="08:00:00" AND Hora_Termino<="14:00:00")

para caso 3:
SELECT campo FROM actividades WHERE (Hora_Inicio>="06:00:00" AND Hora_Inicio<="17:00:00") OR (Hora_Termino>="06:00:00" AND Hora_Termino<="17:00:00")

con ello debiera buscarte en la hora de inicio si esta en el rango de la hora inicial y final y en la hora de salida idem, al detectar que si hay cruce para una o ambas horas te la recogeria.

salu2
  #10 (permalink)  
Antiguo 12/09/2010, 17:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Comparar si dos horas se cruzan entre si

Hola perr0,

si, vi el ejemplo de gnzsoloyo, pero le comentaba que no iba a funcionar porque que tal sí:

quiero llevar una actividad de 06:00 a 15:00 Hrs...

pero ya tengo una de 08:00 a 14:00... entonces YA NO PUEDO llevarla...porque PARTE del horario que quiero ya esta ocupado....

y mira que las horas 06:00 a 15:00 no están en el rango de 08:00 a 14:00, están fuera de rango...

pero aun estando fuera de rango me impiden llevar la actividad que deseo...

no sé si me explico, o igualmente, no se si les estoy entendiendo bien yo

Gracias por responder :D buen dia!
  #11 (permalink)  
Antiguo 12/09/2010, 18:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Comparar si dos horas se cruzan entre si

Cita:
quiero llevar una actividad de 06:00 a 15:00 Hrs...

pero ya tengo una de 08:00 a 14:00... entonces YA NO PUEDO llevarla...porque PARTE del horario que quiero ya esta ocupado....
No hay que ahogarse en un vaso de agua: Eso solamente le agrega la condición al menos uno de los horarios en la tabla esté entre los dos parámetros de entrada...
Código MySQL:
Ver original
  1. SELECT COUNT(*) cruzadas
  2. FROM tabla T
  3.   (horainicial BETWEEN Hora_Inicio AND Hora_Fin)
  4.   OR
  5.   (horafinal BETWEEN Hora_Inicio AND Hora_Fin);
  6.   OR
  7.   (Hora_Inicio BETWEEN horainicial AND horafinal);
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 12/09/2010, 20:59
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 18 años, 10 meses
Puntos: 79
Respuesta: Comparar si dos horas se cruzan entre si

Cita:
Iniciado por codigouserphp Ver Mensaje
Hola perr0,

si, vi el ejemplo de gnzsoloyo, pero le comentaba que no iba a funcionar porque que tal sí:

quiero llevar una actividad de 06:00 a 15:00 Hrs...

pero ya tengo una de 08:00 a 14:00... entonces YA NO PUEDO llevarla...porque PARTE del horario que quiero ya esta ocupado....

y mira que las horas 06:00 a 15:00 no están en el rango de 08:00 a 14:00, están fuera de rango...

pero aun estando fuera de rango me impiden llevar la actividad que deseo...

no sé si me explico, o igualmente, no se si les estoy entendiendo bien yo

Gracias por responder :D buen dia!
eso esta claro pero para no enrredarse quizá el codigo asi es mas fácil de ver

WHERE (campo_hora_inicio BETWEEN '06:00:00' AND '15:00:00') OR (campo_hora_final BETWEEN '06:00:00' AND '15:00:00')

ahora si tienes una actividad entre las 8:00 y 14:00, campo_hora_inicio y campo_hora_final respectivamente:

(campo_hora_inicio BETWEEN '06:00:00' AND '15:00:00')
para campo_hora_inicio: las 8:00 está dentro del rango 6:00 y 15:00 de la hora de inicio, con eso ya basta para validar

pero ademas te da la opcion de
(campo_hora_final BETWEEN '06:00:00' AND '15:00:00')
para campo_hora_final: las 14:00 está dentro del rango 6:00 y 15:00, ya tienes dos validaciones

como en la lógica si ocupas un OR y con que uno de los sea VERDADERO, la frase es VERDADERA, en este caso la sentencia.

si no fuera el caso, quizá te convenga hacer un bosquejo y explicarte mejor, pero eso es lo que yo y creo varios entendemos de tu consulta. si tienes phpmyadmin, create una tabla similar o si ya la tienes hecha hace correr los comandos y ve si es el resultado que buscas.

salu2
  #13 (permalink)  
Antiguo 13/09/2010, 18:08
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: Comparar si dos horas se cruzan entre si

lo que dice el perro tiene mucha logica... el OR dice que la frase es verdera cuando una de las dos condiciones se cumplen

WHERE (campo_hora_inicio BETWEEN '06:00:00' AND '15:00:00') OR (campo_hora_final BETWEEN '06:00:00' AND '15:00:00')

i esto q puso el, a mi se me hace correcto
  #14 (permalink)  
Antiguo 21/09/2010, 14:58
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 13 años, 7 meses
Puntos: 1
De acuerdo Respuesta: Comparar si dos horas se cruzan entre si

Disculpen la tardanza. Al parecer no estaba comprendiendo bien sus aportaciones. Las probare y les comento!

Gracias por sus orientaciones!
  #15 (permalink)  
Antiguo 22/09/2010, 04:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Comparar si dos horas se cruzan entre si

Primero tienes que cargar el registro que quieres comparar, concretamente su Hora_inicio en la variable horainicial, y su hora_Termino en la variable horafinal, además de su id, claro. Luego comparas ese dato con todos los demás.

SELECT * FROM tabla WHERE horainicial<=Hora_Termino AND horafinal>=Hora_Inicio WHERE id != id

Las condiciones son claras: la hora inicial debe ser menor o igual que la hora de termino y a la vez que la hora final sea mayor o igual que la hora de inicio. Esas son las coincidencias. Porque si la horainicial es mayor que la hora de término, ya no hay coincidencia, y si la hora final es menor que la hora de inicio, tampoco.
Esta consulta nos lo enseñó Avatar810.
  #16 (permalink)  
Antiguo 01/10/2010, 14:03
 
Fecha de Ingreso: septiembre-2010
Mensajes: 28
Antigüedad: 13 años, 7 meses
Puntos: 1
Respuesta: Comparar si dos horas se cruzan entre si

nuevamente mil disculpas por tardar, y gracias por sus recomendaciones :D ,
lo vine a solucionar con algo como esto:

while ($row = mysql_fetch_object($rs)){
echo "<p>";
if($row->IdCurso!=$IdCurso){
echo "Hora de Inicio ".$row->HoraInicio." Hora de Termino ".$row->HoraTermino;
echo " ";

if ($row->HoraInicio >= $Hora1 and $row->HoraInicio <= $Hora2 and $row->HoraTermino >= $Hora1 and $row->HoraTermino <= $Hora2) {
echo "<b>AMBAS horas estan DENTRO del horario anterior</b>";
$problema = 1;
} elseif ($row->HoraInicio < $Hora1 and $row->HoraTermino > $Hora1) {
echo "<b>problema con la HORA FINAL</b>";
$problema = 1;
} elseif ($row->HoraInicio < $Hora2 and $row->HoraTermino > $Hora2) {
echo "<b>problema con la HORA DE INICIO</b>";
$problema = 1;
}else{
echo "<b>horario DISPONIBLE</b>";
$problema = 0;
}



las horas a comparar eran guardadas en 2 variables: $Hora1 y Hora2 , de ahi, entraban a los if's... y eran evaludas con todas las ya existentes en la base de datos.

funciona perfecto!

un saludo a todos!!!!

Etiquetas: comparar, dos, horas
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 11:46.