<?php
// Define o intervalo da manhã:
$hora_manha_min = new DateTime("08:00");
$hora_manha_max = new DateTime("12:00");
// Define o intervalo da tarde:
$hora_tarde_min = new DateTime("13:00");
$hora_tarde_max = new DateTime("18:00");
// Intervalo de 15 minutos:
$intervalo = new DateInterval("PT15M");
// Lista de todos os horários:
$horarios = [];
// Adiciona na lista os horários da manhã com intervalo de 15 minutos:
$temp = clone $hora_manha_min;
while ($temp <= $hora_manha_max)
{
$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)
{
$horarios[] = $temp;
$temp = clone $temp;
$temp->add($intervalo);
}
// Horários ocupados:
$ocupado_1_ini = new DateTime("09:00");
$ocupado_2_ini = new DateTime("10:45");
// Remove da lista os horários ocupados:
if(($key = array_search($ocupado_1_ini, $horarios)) !== false) { echo "Removendo ", $horarios[$key]->format("H:i"), PHP_EOL;
}
if(($key = array_search($ocupado_2_ini, $horarios)) !== false) { echo "Removendo ", $horarios[$key]->format("H:i"), PHP_EOL;
}
// Imprime um horário aleatório:
echo $horarios[array_rand($horarios)]->format("H:i"), PHP_EOL
;
PD9waHAKCi8vIERlZmluZSBvIGludGVydmFsbyBkYSBtYW5ow6M6CiRob3JhX21hbmhhX21pbiA9IG5ldyBEYXRlVGltZSgiMDg6MDAiKTsKJGhvcmFfbWFuaGFfbWF4ID0gbmV3IERhdGVUaW1lKCIxMjowMCIpOwoKLy8gRGVmaW5lIG8gaW50ZXJ2YWxvIGRhIHRhcmRlOgokaG9yYV90YXJkZV9taW4gPSBuZXcgRGF0ZVRpbWUoIjEzOjAwIik7CiRob3JhX3RhcmRlX21heCA9IG5ldyBEYXRlVGltZSgiMTg6MDAiKTsKCi8vIEludGVydmFsbyBkZSAxNSBtaW51dG9zOgokaW50ZXJ2YWxvID0gbmV3IERhdGVJbnRlcnZhbCgiUFQxNU0iKTsKCi8vIExpc3RhIGRlIHRvZG9zIG9zIGhvcsOhcmlvczoKJGhvcmFyaW9zID0gW107CgovLyBBZGljaW9uYSBuYSBsaXN0YSBvcyBob3LDoXJpb3MgZGEgbWFuaMOjIGNvbSBpbnRlcnZhbG8gZGUgMTUgbWludXRvczoKJHRlbXAgPSBjbG9uZSAkaG9yYV9tYW5oYV9taW47Cgp3aGlsZSAoJHRlbXAgPD0gJGhvcmFfbWFuaGFfbWF4KQp7CiAgICAkaG9yYXJpb3NbXSA9ICR0ZW1wOwogICAgJHRlbXAgPSBjbG9uZSAkdGVtcDsKICAgICR0ZW1wLT5hZGQoJGludGVydmFsbyk7Cn0KCi8vIEFkaWNpb25hIG5hIGxpc3RhIG9zIGhvcsOhcmlvcyBkYSB0YXJkZSBjb20gaW50ZXJ2YWxvIGRlIDE1IG1pbnV0b3M6CiR0ZW1wID0gY2xvbmUgJGhvcmFfdGFyZGVfbWluOwoKd2hpbGUgKCR0ZW1wIDw9ICRob3JhX3RhcmRlX21heCkKewogICAgJGhvcmFyaW9zW10gPSAkdGVtcDsKICAgICR0ZW1wID0gY2xvbmUgJHRlbXA7CiAgICAkdGVtcC0+YWRkKCRpbnRlcnZhbG8pOwp9CgovLyBIb3LDoXJpb3Mgb2N1cGFkb3M6CiRvY3VwYWRvXzFfaW5pID0gbmV3IERhdGVUaW1lKCIwOTowMCIpOwokb2N1cGFkb18yX2luaSA9IG5ldyBEYXRlVGltZSgiMTA6NDUiKTsKCi8vIFJlbW92ZSBkYSBsaXN0YSBvcyBob3LDoXJpb3Mgb2N1cGFkb3M6CmlmKCgka2V5ID0gYXJyYXlfc2VhcmNoKCRvY3VwYWRvXzFfaW5pLCAkaG9yYXJpb3MpKSAhPT0gZmFsc2UpIHsKICAgIGVjaG8gIlJlbW92ZW5kbyAiLCAkaG9yYXJpb3NbJGtleV0tPmZvcm1hdCgiSDppIiksIFBIUF9FT0w7CiAgICB1bnNldCgkaG9yYXJpb3NbJGtleV0pOwp9CgppZigoJGtleSA9IGFycmF5X3NlYXJjaCgkb2N1cGFkb18yX2luaSwgJGhvcmFyaW9zKSkgIT09IGZhbHNlKSB7CiAgICBlY2hvICJSZW1vdmVuZG8gIiwgJGhvcmFyaW9zWyRrZXldLT5mb3JtYXQoIkg6aSIpLCBQSFBfRU9MOwogICAgdW5zZXQoJGhvcmFyaW9zWyRrZXldKTsKfQoKLy8gSW1wcmltZSB1bSBob3LDoXJpbyBhbGVhdMOzcmlvOgplY2hvICRob3Jhcmlvc1thcnJheV9yYW5kKCRob3JhcmlvcyldLT5mb3JtYXQoIkg6aSIpLCBQSFBfRU9MOw==