Всем привет! Есть задача найти свободные интервалы времени.
Написал такой метод:
private function getFreeInterval($intervals, $startTime, $endTime)
{
foreach($intervals as $key => $value){
$value = explode('-', $value);
$intervalOne = new \DateTime($value[0]);
$intervalTwo = new \DateTime($value[1]);
if ($intervalOne >= $startTimeItem && $endTimeItem <= $intervalTwo){
$intervals[] = "{$intervalOne->format('H:i:s')}-{$startTimeItem->format('H:i:s')}";
$intervals[] = "{$endTimeItem->format('H:i:s')}-{$intervalTwo->format('H:i:s')}";
unset($intervals[$key]);
// dd($endTimeItem, $intervalTwo, $intervalOne, $startTimeItem);
break;
}
}
return $intervals;
}
Метод выполняет следующую функцию:
на вход к нему приходит список интервалов, такие вот:
array:2 [
0 => "09:30:00-13:15:00"
1 => "14:00:00-17:00:00"
]
Это список свободных интервалов, то есть между 13:15:00 и 14:00:00 уже занято, остальное как бы свободно
Так же в метод передается переменные startTime и endTime, в которых конец и начало записи клиента.
И нужно чтобы метод постоянно возвращала правильный список. В данном моменте метод возвращает правильный результат лишь один раз. То есть, если ее запустить, то вернется какой-то список интервалов состоящий из трех элементов. Затем если эти три элемента опять передать методу и поставить какие-то start и end time, то методы уже вернет неверный результат.
Вот что получаю при первом ее запуске, если передаю этот массив
array:2 [
0 => "09:30:00-13:15:00"
1 => "14:00:00-17:00:00"
]
затем начало такое: 09:30:00 и конец 10:15:00, то вот что возвращает:
array:3 [
1 => "14:00:00-17:00:00"
2 => "09:30:00-09:30:00"
3 => "10:15:00-13:15:00"
]
То что во втором элементе массива тоже неправильно, наверное.
И дальше.. если передать уже этот массив, что только что пришел, и start = 10:30:00 и end = 11:15:00
То вот какой результат щас:
array:4 [
1 => "09:30:00-09:30:00"
2 => "10:15:00-13:15:00"
3 => "14:00:00-10:30:00"
4 => "11:15:00-17:00:00"
]
Вот, не понятно откуда там 10:15:00-13:15:00 если их там не должно быть
там должен быть интервал 10:15:00-10:30:00, 11:15:00-13:15:00 и 14:00:00-17:00:00
Как эту проблему решить? Может у меня вообще не та реализация?