Вы можете использовать эту функцию (которая использует strtotime
для генерации значений, которые можно сравнивать напрямую), чтобы выяснить, в каком сдвиге вы находитесь. Обратите внимание, что она способна работать с несколькими определениями сдвига, которые не обязательно охватывают весь день:
function get_shift($now, $string) {
$now = strtotime($now);
foreach (explode(",", $string) as $shift => $shiftHours) {
list($start, $end) = explode('-', $shiftHours);
$stime = strtotime($start);
$etime = strtotime($end);
if ($etime < $stime && ($now < $etime || $now >= $stime) || $now >= $stime && $now < $etime) {
return "Shift " . ($shift+1);
}
}
return "Outside hours";
}
Пример использования:
for ($now = 0; $now < 24; $now++) {
echo "$now: " . get_shift("$now:00", '09:00 - 14:00,16:00 - 21:00, 23:00 - 07:00') . "\n";
}
Выход:
0: Shift 3
1: Shift 3
2: Shift 3
3: Shift 3
4: Shift 3
5: Shift 3
6: Shift 3
7: Outside hours
8: Outside hours
9: Shift 1
10: Shift 1
11: Shift 1
12: Shift 1
13: Shift 1
14: Outside hours
15: Outside hours
16: Shift 2
17: Shift 2
18: Shift 2
19: Shift 2
20: Shift 2
21: Outside hours
22: Outside hours
23: Shift 3
Демонстрация на 3v4l.org