Random Data with exception PHP

0

I have the following case:

I have an appointment from 08:00 to 12:00 and 13:00 to 18:00.

$hora_manha_min="08:00"; // Pode variar conforme consulta em Web Service (String)
$hora_manha_max="12:00"; // Pode variar conforme consulta em Web Service (String)
$hora_tarde_min="13:00"; // Pode variar conforme consulta em Web Service (String)
$hora_tarde_max="18:00"; // Pode variar conforme consulta em Web Service (String)

But the times from 09:00 to 09:15 and 10:45 to 11:10 are already busy

$ocupado_1_ini="09:00"; // Pode variar conforme consulta em Web Service (String)
$ocupado_1_fim="09:15"; // Pode variar conforme consulta em Web Service (String)
$ocupado_2_ini="10:45"; // Pode variar conforme consulta em Web Service (String)
$ocupado_2_fim="11:10"; // Pode variar conforme consulta em Web Service (String)

I need a random time within hours that is not within the busy hours and that I have a range set in a variable, for example:

$intervalo="00:15"; // Pode variar conforme consulta em Web Service (String)
// Resultados possíveis: 08:30,08:45,09:15,09:30,09:45,10:00,10:15,10:30,11:15,etc

I already thank you for the help.

    
asked by anonymous 08.05.2017 / 23:20

1 answer

0
function procurahorario($manha_min,$manha_max,$tarde_min,$tarde_max,$intervalo,$horarioocupado){
    // Define o intervalo da manhã:
    $hora_manha_min=new DateTime($manha_min);
    $hora_manha_max=new DateTime($manha_max);
    $hora_tarde_min=new DateTime($tarde_min);
    $hora_tarde_max=new DateTime($tarde_max);
    $intervalo=new DateInterval($intervalo);
    // Lista de todos os horários:
    $horarios=array(new DateTime('00:00'));
    // Adiciona na lista os horários da manhã com intervalo de 15 minutos:
    $temp = clone $hora_manha_min;
    while ($temp <= $hora_manha_max){
        array_push($horarios,$temp);
        $temp = clone $temp;
        $temp->add($intervalo);
    }
    // Adiciona na lista os horários da tarde com intervalo de 15 minutos:
    $temp = clone $hora_tarde_min;
    while ($temp <= $hora_tarde_max){
        array_push($horarios,$temp);
        $temp = clone $temp;
        $temp->add($intervalo);
    }

    $ocupado=explode("/",$horarioocupado);
    $total_ocupado=count($ocupado);
    for($i=0;$i<$total_ocupado;$i++){
        $ini_ocupado=explode("|",$ocupado[$i]);
        // Horários ocupados:
        $ocupado_ini = new DateTime($ini_ocupado[0]);
        // Remove da lista os horários ocupados:
        if(($key = array_search($ocupado_ini,$horarios)) !== false) {
            //echo "Removendo ", $horarios[$key]->format("H:i"), PHP_EOL;
            unset($horarios[$key]);
        }
    }
    // Devolve um horário aleatório:
    $result=$horarios[array_rand($horarios)]->format("H:i");
    return $result;
}
    
13.05.2017 / 03:26