Накидал вам функцию проверки. Можете подставлять значения и тестировать работу.
<?php
function getBorderTimes($times){
return explode('-', $times);
}
function getDateTime($time){
return DateTime::createFromFormat('H:i', $time);
}
$enrollTime = '13:00-14:00';
$busyTimes = ['9:00-11:30', '11:30-13:00', '14:00-15:00'];
$enrollBorderTimes = getBorderTimes($enrollTime);
$enrollStartTime = getDateTime($enrollBorderTimes[0]);
$enrollStopTime = getDateTime($enrollBorderTimes[1]);
$canEnroll = true;
foreach ($busyTimes as $busyTime) {
$borderTimes = getBorderTimes($busyTime);
/**
* $borderTimes[0] - время начала записи
* $borderTimes[1] - время окончания записи
*/
$startTime = getDateTime($borderTimes[0]);
$stopTime = getDateTime($borderTimes[1]);
/**
* Если время начала записи в промежутке других записей, то считаем время записи невалидной
*/
if($startTime < $enrollStartTime && $stopTime > $enrollStartTime){
$canEnroll = false;
break;
}
/**
* Если время конца записи в промежутке других записей, то считаем время записи невалидной
*/
if($startTime < $enrollStopTime && $stopTime > $enrollStopTime){
$canEnroll = false;
break;
}
}
if($canEnroll){
echo 'Можете записаться';
}else{
echo 'Записаться нельзя';
}
echo PHP_EOL;