Вам надо отслеживать, в каком "рабочем дне" вы сейчас находитесь и на основе этого двигать границы интервала.
Туповато, но, надеюсь, наглядно:
function isWorkTime(string $timeFrom, string $timeTo, ?string $currentTime = null): bool
{
$t1 = strtotime($timeFrom);
$t2 = strtotime($timeTo);
$now = $currentTime === null ? time() : strtotime($currentTime);
if ($t2 < $t1) {
if ($t1 > $now) {
$t1 -= 86400; // минус одни сутки
} else {
$t2 += 86400; // плюс одни сутки
}
}
return $t1 <= $now && $now < $t2;
}
var_export([
'=== 12:00 - 13:00 (1 hour) ===',
'1. 11:59' => isWorkTime('12:00', '13:00', '11:59'),
'1. 12:00' => isWorkTime('12:00', '13:00', '12:00'),
'1. 12:01' => isWorkTime('12:00', '13:00', '12:01'),
'1. 12:59' => isWorkTime('12:00', '13:00', '12:59'),
'1. 13:00' => isWorkTime('12:00', '13:00', '13:00'),
'1. 13:01' => isWorkTime('12:00', '13:00', '13:01'),
'1. 00:00' => isWorkTime('12:00', '13:00', '00:00'),
'=== 00:00 - 12:00, 13:00 - 00:00 (23 hours) ===',
'2. 11:59' => isWorkTime('13:00', '12:00', '11:59'),
'2. 12:00' => isWorkTime('13:00', '12:00', '12:00'),
'2. 12:01' => isWorkTime('13:00', '12:00', '12:01'),
'2. 12:59' => isWorkTime('13:00', '12:00', '12:59'),
'2. 13:00' => isWorkTime('13:00', '12:00', '13:00'),
'2. 13:01' => isWorkTime('13:00', '12:00', '13:01'),
'2. 00:00' => isWorkTime('13:00', '12:00', '00:00'),
], false);