Saber si una hora está en un rango de horas en PHP

Rango de horas PHP

Los problemas con las fechas, son de lo más común a la hora de programar, añadir un día, restar días, comprobar si una fecha esta entre dos fechas.

Pero hoy vamos a hablar un poco más en profundidad y hablaremos de las horas de un día.

Porqué muchas veces trabajar con días es suficiente, pero a veces necesitamos tratar una franja horaria dentro de un día, para saber si pertenece esa franja al día anterior o al presente.

Así que vamos a ver como lo haríamos para ver si una fecha con hora se encuentra dentro de un rango de horas.

Función comprueba una hora entre un rango

A continuación os pongo la función que vamos a usar para ver si una hora se encuentra dentro de ese rango de horas que definamos.

En la función lo que haremos será pasarle, el desde y el hasta del rango de horas que queremos que se encuentre y el datetime con la hora que nos llega.

Comprobaremos si la segunda hora que le pasamos es inferior a la primera, con lo cual entenderemos que es para el día siguiente.

Y al final devolveremos true o false dependiendo si el valor introducido se encuentra entre lo que le hemos pasado.

Ejemplo de llamada a la función

Este sería el código que podríamos usar para hacer la llamada a la función que hemos creado para comprobar el rango de horas.

Aquí lo que hacemos es ir sumando una hora a partir de medianoche y comprobamos si esa hora que vamos sumando se encuentra dentro del rango de horas.

El resultado sería el siguiente:

Como veis al final, las 8 y las 9 no cumplen la condición y por eso sale que no y el resto si que coincide.

Como veis simplemente necesitamos un datetime, con el que poder trabajar y ver si la hora se encuentra dentro del rango de horas.

Así podríamos comprobar si una fecha guardada en base de datos se encuentra entre la sesión de un día o la sesión de otro día, en el caso de que por ejemplo tengamos algún evento que ocurre entre un cierto rango de horas.

Si os interesa también podéis consultar el artículo sobre como restar o sumar horas, minutos o segundos en PHP.

Espero que os haya sido útil.

Y recordad! No olvidéis comentar! Vuestro código y en el blog 😉

11 comentarios

    paolo kusanovic

    Hola puedes poner el codigo de lafuncion hourIsBetween(), como sabes si la hora esta dentro del rango ?

      Oyagum

      Hola paolo! No se si te he entendido bien. Creo que quieres que ponga la función hourIsBetween? La función está puesta en el post es el primer codigo que se ve. No se si es que no se ve bien o es otra cosa lo qud preguntas. Espero haberlo aclarado y sino dimelo y estaré encantado de ayudarte en lo que pueda.

    Nelson

    Hola OYAGUM,
    Tengo php 5.4 en el servidor y me da Fatal error: Call to undefined method DateTime::createFromFormat()
    No entiendo porque DateTime funciona desde PHP 5.3, no logro hacer funcionar la funcion.
    Alguna ayuda? Gracias de antemano.
    Nelson

    Oyagum

    Buenas Nelson,

    Primero de todo darte las gracias por leerme y comentar.

    He estado buscando información sobre lo que te pasa, pero es muy raro lo que me comentas la verdad :-/

    He probado el código en la siguiente página:

    http://sandbox.onlinephpfunctions.com/code/b50dbf04ffa6fa4cf01e32cfec49483c43939420

    Ahí te deja escoger que versión de PHP usar, y en todas las versiones de 5.4 me ha funcionado correctamente, si puedes darme más información sobre el error, miro si puedo solucionarlo, pero ahora mismo me dejas a cuadros la verdad :-/

    Karla

    Hola mi duda es que tengo un sistema donde tengo que hacer las reservaciones esto me pordria ayudat igual para validar fecha y hora al mismo tiempo???
    Me gustaria que el resultado de yes o no me lo guarde en una tabla para despues hacer la consulta

      Oyagum

      Auí la cosa sería hacer las dos comprobaciones, primero ver si está dentro de una fecha con horas libres y luego ver si esas horas escogidas estan libres o no. Almenos es como yo lo haría. Espero que te haya servido de ayuda 🙂 cualquier cosa, me dices 😉

    Augusto

    Hola gracias por tu aporte

    no entendí el ejemplo;
    Cuáles son los parámetros?
    Cual es el dato imput?
    A qué valor le sumas una hora? Al imput?
    Saludos

    Augusto
    Ahetsav@gmail.com

      Oyagum

      Buenas Augusto,

      Los parametros son from y to, osea desde tal hora hasta tal hora, y el input es la hora que introduces, osea, por ejemplo, alguien te pone las 09:00, ese es el input, y quieres saber si eso está dentro de franja horaria que fuera 08:00 hasta 22:00, 08:00 es el from y 22:00 es el to.

      Así que la función lo que hace es coger el input, en este caso las 09:00 y comprueba que esa hora, este dentro de la franja de 08:00 hasta 22:00.

      Y si le sumo una hora al input, porque es una demo y compruebo varias horas que esten dentro del margen que he puesto 🙂 simplemente es eso, un bucle para probar varias horas introducidas de forma automática.

      Espero haberte podido ayudar, sino, cualquier cosa me dices.

      Un saludo!

    Darwin

    Hola como puedo hacer que la variable $to esten incluidos
    Ej.
    hourIsBetween(’08:00′, ’12:00′, ’08:00′); //SI
    hourIsBetween(’08:00′, ’12:00′, ’12:00′); //NO (aunque si esta pero quiero que para $to se pueda incluir)

    Darwin

    Ya logre solucionarlo!

    Hola como puedo hacer que la variable $to esten incluidos
    Ej.
    hourIsBetween(’08:00′, ’12:00′, ’08:00′); //SI
    hourIsBetween(’08:00′, ’12:00′, ’12:00′); //NO (aunque si esta pero quiero que para $to se pueda incluir)

    Darwin

    Hola muy buen aporte felicidades, ahora te lo pongo un poco mas difícil:
    Que ahora la funcion pueda verificar si un rango de horas esta dentro de otro rango de hora, espero tu pronta respuesta, saludos.

    function hourIsBetween($from, $to, $inputFrom, $inputTo) {
    ????
    }

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*
*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.