Foros del Web » Programando para Internet » PHP »

Saber si estoy entre dos horas del dia

Estas en el tema de Saber si estoy entre dos horas del dia en el foro de PHP en Foros del Web. Hola! estoy tratando de hacer algo que pensé que sería super fácil! pero resulto más complicado de lo que esperaba... Tengo una tabla mysql donde ...
  #1 (permalink)  
Antiguo 10/03/2010, 16:58
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 17 años, 1 mes
Puntos: 16
Exclamación Saber si estoy entre dos horas del dia

Hola! estoy tratando de hacer algo que pensé que sería super fácil! pero resulto más complicado de lo que esperaba...

Tengo una tabla mysql donde guardo los rangos de horario de atención de un negocio, por ej: 08:00:00 a 12:00:00 y 16:00:00 a 01:00:00 (de 8 de la mañana a 12 del medio dia y de 4 de la tarde a 1 de la madrugada)

Para eso tengo 4 campos, horario_ini_1, horario_fin_1 y horario_ini_2, horario_fin_2 que son del tipo TIME.

El problema es que MySQL no me permite hacer comparaciones como horario_inicio_1 < CURTIME(). Al principio pensé que andaba pero en realidad lo estaba convirtiendo a INT o algo por el estilo.

¿Como podría hacer eso?

Desde ya muchas gracias!!!!
__________________
Responder encuestas
  #2 (permalink)  
Antiguo 10/03/2010, 17:26
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Saber si estoy entre dos horas del dia

A ver, ahí el diseño está bastante malito, dices que horario_ini_1 y los demás son de tipo time, porqué? si time registra un único tiempo en la historia de la humanidad. Time es un punto en el tiempo. No uses time, usa un int solamente, para tu caso hasta puede ser un TINYINT ya que solo necesitas registrar un número entero menor que 24. O sea, en ese campos solo debes guardar un número que es la hora usando el horario de 24 horas.

Cuando hagas las consultas no las compares con CURTIME porque estás comparando con un valor de esta forma: 'HH:MM:SS' o HHMMSS, dependiendo del contexto de comparación. Bueno, tu consulta sería algo así:

horario_inicio_1 < HOUR(CURTIME())

Espero que te haya quedado claro, suerte!
  #3 (permalink)  
Antiguo 10/03/2010, 17:34
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 17 años, 1 mes
Puntos: 16
Respuesta: Saber si estoy entre dos horas del dia

Hola ElJavista gracias por tu respuesta.

El campo es TIME o sea 00:00:00, no es DATETIME que ese si representa un punto en el tiempo.

Por otra parte hacer que el campo sea INT tampoco funcionaria porque en el ejemplo que puse (4 de la tarde a 1 de la madrugada) 4 de la tarde, o sea 16, es mayor que 4 de la madrugada. Por eso no se puede hacer la comparacion.

Por eso decia que es más dificil de lo que parece ;)
  #4 (permalink)  
Antiguo 10/03/2010, 17:41
Avatar de De_la_Cuesta_13  
Fecha de Ingreso: abril-2009
Ubicación: Cali, Colombia.
Mensajes: 265
Antigüedad: 15 años
Puntos: 14
Respuesta: Saber si estoy entre dos horas del dia

Amigo estoy en un proyecto y tengo algo parecido, pero no me parece que sea correcto como has diseñado tu Tabla. Según entiendo, el negocio tiene dos horarios que va de: 08:00:00-12:00:00 y 16:00:00. Ahora mi inquietud es esta: Supongamos que se quiere adicionar un nuevo horario, digamos 14:00:00-15:45:00, tendríamos que agregarle a la tabla horario_ini_3, horario_fin_3? Lo mejor será que crees, que el negocio tiene horarios, y los horarios tienen una hora de inicio y una hora de fin, y de esta forma agregaríamos más horarios si fuera el caso.
Respecto a tu inquietud, entiendo que lo que quieres es comparar, supongamos, si las 09:00:00 están en alguno de los horarios existentes, y quieres validar algo, no sé. Sería que tomaras en cuenta lo que te menciono lo de tu diseño de BD y luego que aclararas mejor tu consulta.

Saludos.
__________________
Sólo quien nunca nada hace, nunca se equivoca.
  #5 (permalink)  
Antiguo 10/03/2010, 17:50
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Saber si estoy entre dos horas del dia

Cita:
Iniciado por quebien Ver Mensaje
Hola ElJavista gracias por tu respuesta.

El campo es TIME o sea 00:00:00, no es DATETIME que ese si representa un punto en el tiempo.

Por otra parte hacer que el campo sea INT tampoco funcionaria porque en el ejemplo que puse (4 de la tarde a 1 de la madrugada) 4 de la tarde, o sea 16, es mayor que 4 de la madrugada. Por eso no se puede hacer la comparacion.

Por eso decia que es más dificil de lo que parece ;)
Ok, tienes razon, me confundí con los términos y también en el análisis. Bien, podrías usar la función INTERVAL de Mysql, te paso el link donde puedes hallar suficiente información (En verdad es más difícil de lo que uno cree al principio, pero tampoco lo es tanto).


http://dev.mysql.com/doc/refman/5.0/...functions.html

Espero que te sirva, suerte!
  #6 (permalink)  
Antiguo 10/03/2010, 18:14
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 17 años, 1 mes
Puntos: 16
Respuesta: Saber si estoy entre dos horas del dia

Estuve viendo la documentacion y lo mejor que pude hacer es esto:

...WHERE
horario_inicio_1+0 <= CURTIME()+0 AND horario_fin_1+0 > CURTIME()+0
OR
horario_inicio_2+0 <= CURTIME()+0 AND horario_fin_2+0 > CURTIME()+0

El +0 es para que transforme la hora a integer, asi puedo hacer las comparaciones.

Funciona, el problema que todavia no puedo solucionar es en el caso de que el rango de horario pase de las 0 horas (por ej. de 20hs a 3hs), porque 20 es mayor a 3..., entonces aunque sean las 21hs no lo va a seleccionar. Gran problema..
  #7 (permalink)  
Antiguo 10/03/2010, 18:24
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Saber si estoy entre dos horas del dia

No probaste con INTERVAL?? no te sirve? pensé que era la solución.
  #8 (permalink)  
Antiguo 10/03/2010, 18:31
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 17 años, 1 mes
Puntos: 16
Respuesta: Saber si estoy entre dos horas del dia

INTERVAL es para sumar o restar horas, minutos, dias, etc. a un date o datetime. No le encuentro utilidad en mi problema :(
  #9 (permalink)  
Antiguo 10/03/2010, 19:10
Avatar de ElJavista
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: Lima Perú
Mensajes: 2.231
Antigüedad: 17 años, 1 mes
Puntos: 67
Respuesta: Saber si estoy entre dos horas del dia

Tienes razón, no sé porque estoy fallando así. Ok, te queda una idea, usar PHP. Esta es la idea. OK, tienes tus campos con las horas. Obtienes el timestamp de cada uno, si estamos antes de la media noche, las horas que están antes de la media noche usarán la fecha actual para obtener sus timestamp, si son pasadas de la media noche se tendría que calcular en base al día siguiente. Si estamos después de la media se procedería de manera inversa. Así obtienes los timestamp, ahora al hacer la consulta SQL utilizas la función de MySQL que te da el timestamp actual. Ese sería mi aporte, creo que esa sería la solución, espero que lo pruebes y me digas los resultados. Suerte!
  #10 (permalink)  
Antiguo 10/03/2010, 19:26
Avatar de De_la_Cuesta_13  
Fecha de Ingreso: abril-2009
Ubicación: Cali, Colombia.
Mensajes: 265
Antigüedad: 15 años
Puntos: 14
Respuesta: Saber si estoy entre dos horas del dia

Amigo este código seguro te servirá:
Código PHP:
<?
$horario_ini_1 
strtotime"08:00:00" ); $horario_fin_1 strtotime"12:00:00" );
$horario_ini_2 strtotime"16:00:00" ); $horario_fin_2 strtotime"23:59:59" ); 
$ad_hora strtotime("01:00:01");
$hora_compara =  strtotime"17:00:00" );
$horario_fin_2 $horario_fin_2 $ad_hora;

if(
$horario_ini_1<=$hora_compara && $hora_compara<=$horario_fin_1){
      echo 
"La hora está en el horario 1";
      return;
    }

if(
$horario_ini_2<=$hora_compara && $hora_compara<=$horario_fin_2){
      echo 
"La hora está en el horario 2";
      return;
    }  

else
    echo 
"La hora no está en ningún horario";
?>
Saludos.
__________________
Sólo quien nunca nada hace, nunca se equivoca.
  #11 (permalink)  
Antiguo 10/03/2010, 19:41
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 17 años, 1 mes
Puntos: 16
Respuesta: Saber si estoy entre dos horas del dia

muchas gracias por sus respuestas! lo voy a solucionar con PHP entonces :)

Etiquetas: dia, 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 14:28.