<?php
//определяем шаг времени
$timestep = 30;
// Размер свободного слота для поиска
$servicetime = 90;
//определяем занятое время, минуты
$busytime = array(
480,
720,
840,
870,
1020
);
// определить сколько слотов занимает процедура
$timeneed = $servicetime / $timestep;
echo ("Услуга занимает: ");
echo ($timeneed);
echo (" слота, или ");
echo ($servicetime);
echo (" минут<br/>");
// определяем рабочее время (часы)
$hourstart = 8;
$hoursend = 20;
// переводим время в минуты
$worktimestart = $hourstart * 60;
$worktimeend = $hoursend * 60;
//определяем свободное время
$freetime = $worktimestart - $timestep;
while ($freetime <= $worktimeend)
{
$freetime += $timestep;
//проверка попадания в диапозон занятого времени
foreach ($busytime as $busyvalue)
{
if ($freetime == $busyvalue)
{
echo ('Занятое время: ');
$hours = floor($freetime / 60);
$minutes = $freetime % 60;
$freetimeplus = ($freetime + $servicetime);
$hoursplus = floor($freetimeplus / 60);
$minutesplus = $freetimeplus % 60;
printf('%02d:%02d', $hours, $minutes);
echo (' - ');
printf('%02d:%02d', $hoursplus, $minutesplus);
echo ('<br/>');
}
}
}
//создаем массив - все рабочее время
$worktimeslots = range($worktimestart, $worktimeend, $timestep);
//print_r($a);
//Удаляем занятое время из массива
$array = $worktimeslots;
foreach ($busytime as $busyvalue)
{
if (($key = array_search($busyvalue, $array)) !== false)
{
unset($array[$key]);
}
}
print_r($array);
// Определяем доступное время
//циклом смотрим нумерацию массива подряд
echo ('<br/>');
//смотрим порядковые номера массивов идут ли они подряд
$arrkey = array_keys($array);
$arrkeycount = 0;
$slotscountorder = 1;
foreach ($arrkey as $arrkeyvalue)
{
$arrkeycount++;
$arrtrack += $arrkeyvalue;
if ($arrkeyvalue !== $arrkeycount)
{
$slotscountorder = 1;
while ($arrkeyvalue !== $arrkeycount)
{
$arrkeycount++;
}
}
else
{
$slotscountorder++;
if ($slotscountorder >= $timeneed)
{
if ($arrvalarr >= $worktimestart)
{
echo ('<strong>Доступный слот</strong>');
echo (' => ');
}
//Время начала
$arrvalarr = $array[$arrkeyvalue] - $servicetime;
$hoursarr = floor($arrvalarr / 60);
$minutesarr = $arrvalarr % 60;
//Время завершения
$arrtimefinish = $array[$arrkeyvalue];
$hoursfinish = floor($arrtimefinish / 60);
$minutesfinish = $arrtimefinish % 60;
if ($arrvalarr >= $worktimestart)
{
printf('%02d:%02d', $hoursarr, $minutesarr);
echo (' - ');
printf('%02d:%02d', $hoursfinish, $minutesfinish);
}
echo ('<br/>');
// echo($arrval);
// echo(' => ');
}
}
}
//print_r($arrkey);
//Выводим слоты с нужным количеством слотов подряд, ограничиваясь временем завершения дня
//выводим элементы массива, которые идут подряд
?>