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. Fecha y hora
  2. Dar formato a un número
  3. Rotar logs en Windows
  4. Eliminar formato en Excel
  5. Caché del navegador
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 lunes 21 de mayo de 2012 (03:26:41 +0200) 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