Calculate time difference

0

Hello friends, how are you? So I have the following problem that I had never solved before and I do not even know where to start. I am creating a scheduling system I have the table from above for config in this scheme I have 3 rooms, the opening hours and the timer interval.

I need to generate a select for the company to select the desired time with the limit of 3 selection per hour. Example:

8:05
8:10 AM 8:15
8:20
and so on until lunchtime arrives and continue after lunch back and go to the end of the expedition

Could you give me a light on how I can do this? Many thanks

    
asked by anonymous 24.04.2018 / 16:40

2 answers

1

Hello, it was not very clear what you want but I have done a function here that maybe I can help you.

/**
 * Retorna array de horarios para ser utilizado em select
 *
 * @param string $horarioInicio
 * @param string $horarioFinal
 * @param int $timer | números em minutos a ser adicionado
 */
function obtemHorariosParaSelect($horarioInicio, $horarioFinal, $timer)
{
    $time = DateTime::createFromFormat('H:i:s', $horarioInicio);
    $horarios[] = $horarioInicio;
    while ($horarioInicio <= $time->format('H:i:s') && $horarioFinal > $time->format('H:i:s')) {
        $time->modify("+$timer minutes");
        $horarios[] = $time->format('H:i:s');
    }

    return $horarios;
}

$horarios = array_merge(
    obtemHorariosParaSelect('08:00:00', '12:00:00', 5),
    obtemHorariosParaSelect('13:30:00', '18:00:00', 5)
);

output:

array(
    '08:00:00',
    '08:05:00',
    ...
    '12:00:00',
    '13:30:00',
    ...
    '18:00:00',
)
    
24.04.2018 / 19:16
0
function difDeHoras($hIni, $hFinal)
{        
   // Separa á hora dos minutos
   $hIni = explode(':', $hIni);
   $hFinal = explode(':', $hFinal);

   // Converte a hora e minuto para segundos
   $hIni = (60 * 60 * $hIni[0]) + (60 * $hIni[1]);
   $hFinal = (60 * 60 * $hFinal[0]) + (60 * $hFinal[1]);

   // Verifica se a hora final é maior que a inicial
   if(!($hIni < $hFinal)) {
       return false;
   }

   // Calcula diferença de horas
   $difDeHora = $hFinal - $hIni;

   //Converte os segundos para Hora e Minuto
   $tempo = $difDeHora / (60 * 60);
   $tempo = explode('.', $tempo); // Aqui divide o restante da hora, pois se não for inteiro, retornará um decimal, o minuto, será o valor depois do ponto.
   $hora = $tempo[0];
   @$minutos = (float) (0) . '.' . $tempo[1]; // Aqui forçamos a conversão para float, para não ter erro.
   $minutos = $minutos * 60; // Aqui multiplicamos o valor que sobra que é menor que 1, por 60, assim ele retornará o minuto corretamente, entre 0 á 59 minutos.
   $minutos = explode('.', $minutos); // Aqui damos explode para retornar somente o valor inteiro do minuto. O que sobra será os segundos
   $minutos = $minutos[0];
//Aqui faz uma verificação, para retornar corretamente as horas, mas se não quiser, só mandar retornar a variavel hora e minutos
   if (!(isset($tempo[1]))) {
       if($hora == 1){
           return $hora*60;
       } else {
           return $hora*60;
       }
   } else {
       if($hora == 1){
           if($minutos == 1){
               return $hora*60+$minutos;
           } else {
               return $hora*60+$minutos;
           }
       } else {
           if($minutos == 1){
               return $hora*60+$minutos;
           } else {
               return $hora*60+$minutos;
           }
       }
   }
}
function converteHorasEmMinutos($horas) { 
    $t = explode(".", $horas); 
    $h = $t[0]; 
    if(isset($t[1])) { 
        $m = $t[1]; 
    }else{ 
        $m = "00"; 
    } 
    $mm = ($h * 60); 
    return $mm; 
} 

function converteMinutosEmHoras($time, $format = '%02d:%02d') {
    if ($time < 1) {
        return;
    }
    $hours = floor($time / 60);
    $minutes = ($time % 60);
    return sprintf($format, $hours, $minutes);
}

$loopManha = difDeHoras($configuracao->horario_ini, $configuracao->horario_alm_ini)/$configuracao->timer;
$loopTarde = difDeHoras($configuracao->horario_alm_fim, $configuracao->horario_fim)/$configuracao->timer;
?>




<?php
                    $horarioManha = converteHorasEmMinutos($configuracao->horario_ini);
                    $x = 0;
                    while($x < $loopManha-1) {
                       $x++;
                       $horarioManha = $horarioManha+5;
                       $horarioManhaH = converteMinutosEmHoras($horarioManha);
            ?>
                       <option value="<?=$horarioManha?>" data-subtext="Manhã"><?=$horarioManhaH?></option>
    <?php
      }
    ?>
    
24.04.2018 / 19:17