borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Reemplazar selección con JavaScript Nuevo
  2. ¿Esta IP pertenece a esta red? Modificado
  3. Mozilla Firefox Modificado

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Fecha y hora
  3. Campo autonumérico
  4. Rotar logs en Windows
  5. Reiniciar Apache con cuidado (graceful restart)
Compartir esta página

¿Esta hora está dentro de este horario?

Ésta es probablemente la función a la que me ha llevado más tiempo darle un nombre, pero la idea es simple: nuestra aplicación sólo puede hacer X dentro de un horario concreto (mostrar un aviso, mandar correo, compactar la base de datos...). ¿Podemos ahora? ¿Y a las 10:45? Pues esta función nos lo dice:

/**
 * Determina si la hora de referencia queda dentro del rango horario dado
 *
 * - Todas las horas son cadenas en formato HH:MM (o HH:MM:SS)
 * - El rango es cerrado y de tipo 9:00-14:00 o 23:00-6:00
 * - Compara con la hora actual si no se indica lo contrario
 */

function dentro_de_horario($hms_inicio, $hms_fin, $hms_referencia=NULL){ // v2011-06-21
    if( is_null($hms_referencia) ){
        $hms_referencia = date('G:i:s');
    }

    list($h, $m, $s) = array_pad(preg_split('/[^\d]+/', $hms_inicio), 3, 0);
    $s_inicio = 3600*$h + 60*$m + $s;

    list($h, $m, $s) = array_pad(preg_split('/[^\d]+/', $hms_fin), 3, 0);
    $s_fin = 3600*$h + 60*$m + $s;

    list($h, $m, $s) = array_pad(preg_split('/[^\d]+/', $hms_referencia), 3, 0);
    $s_referencia = 3600*$h + 60*$m + $s;

    if($s_inicio<=$s_fin){
        return $s_referencia>=$s_inicio && $s_referencia<=$s_fin;
    }else{
        return $s_referencia>=$s_inicio || $s_referencia<=$s_fin;
    }
}

El código ilustra también cómo parsear una hora en formato HH:MM:SS sin ser demasiado estrictos con los separadores o el número de dígitos.

Esta página ha sido impresa el miércoles 22 de febrero de 2012 (19:20:10 +0100) desde http://borrame.com/recortes/php/dentro-de-horario.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2011 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com