Как получить результат в промежутке между сменами? - PullRequest
0 голосов
/ 29 апреля 2020

У меня такой код, но всегда возвращаю значение 'Shift 2'.

$now = 6;
$string = '09:00 - 14:00,14:00 - 09:00';
$activeHour = explode(",", $string);
foreach ($activeHour as $key => $value) {
    $activeHours = explode('-',$value);
    $start = explode(':',$activeHours[0]);
    $end = explode(':',$activeHours[1]);

    if( $now >= (int)$start[0] && $now <= (int)$end[0] ){
        $status = "Shit 1";
    }else{
        $status = "Shift 2";
    }
}

Как получить результат с этим условием? $ shift1 = 09:00 - 14:00; ==> Shift 1 $ shift2 = 14:00 - 09:00; если $ now время между $ shift1 показывает результат "Shift 1" и если $ now между $ shift2 показывает результат "Shift 2"

1 Ответ

1 голос
/ 29 апреля 2020

Вы можете использовать эту функцию (которая использует 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...