Проверка вхождения времени в интервал

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Проверка вхождения времени в интервал

Сообщение louisvuitton »

Что-то я туплю :oops:
у меня есть время работы какого-то места (в минутах от начала суток)

Мне нужно сигнализировать (возвращать true) если место уже открыто ИЛИ БУДЕТ ОТКРЫТО в течение 2-х след часов.
На первый взгляд все просто, пишу что-то вроде

Код: Выделить всё

$timeStart = 720;  // открывается в 12:00  (12 * 60 мин)
$timeEnd = 1080; // закрывается в 18:00
$timeNow = 660;   // допустим сейчас 11:00 

$result = false;
if($timeStart - 2 * 60 <= $timeNow && $timeNow <= $timeEnd) {
$result = true;
}

return $result;
НО если время открытия например 00:30 (30мин) а сейчас 23:00 ( 1380 мин) то все становится гораздо интереснее, и такой код не прокатит (нужно показывать true т.к. в течение след 2-x часов место откроется).

Как учесть такие случаи? не получается придумать
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Проверка вхождения времени в интервал

Сообщение zelenin »

Код: Выделить всё

$dateTimeStart = new DateTime(...);
$dateTimeEnd = new DateTime(...);
$dateTimeNow = new DateTime();

if($dateTimeStart < $dateTimeNow && $dateTimeEnd > $dateTimeNow) {
    return true;
}

if($dateTimeEnd < $dateTimeNow) {
    $dateTimeStart->modify('+1 day');
    $dateTimeNow->modify('+2 hours');
    
    if($dateTimeStart < $dateTimeNow) {
        return true;
    }
}

return false;
оперируем датой со временем, а не одним временем.
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Проверка вхождения времени в интервал

Сообщение louisvuitton »

zelenin, Спасибо за ответ!
Я все таки не стал использовать объекты времени, но он навел меня на мысли.
Ответить