Полуночный выпуск - PullRequest
       7

Полуночный выпуск

0 голосов
/ 09 декабря 2011

У меня проблемы с определением, открыт ли магазин или нет после полуночи.

Во вторник ($weekday = 2) магазин работает с 18:00 до 13:30 (после полуночи)

Предположим, что текущее время 01:05

    $weekday = 2;

    //Convert current time to minutes (01:05)
    $currentTime = ($weekday - 1) * 1440 + "01" * 60 + "05";

    //Current Week Day

    $shopOpenTime = "18:00";
    $shopCloseTime = "01:30";

    $open = explode(':', $shopOpenTime);
    $close = explode(':', $shopCloseTime);

    //Convert to Minutes;
    $MinutesOpen = (($weekday - 1) * 1440) + ($open[0] * 60 + $open[1]);
    $MinutesClose = (($weekday - 1) * 1440) + ($close[0] * 60 + $close[1]);
    if ($MinutesClose < $MinutesOpen)
        $MinutesClose += 60 * 24;


    if (($currentTime >= $MinutesOpen) && ($currentTime < $MinutesClose)) {
        echo "Shop Is Open";
    }  else { 
       echo "Shop Is Close";
     }  

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Честно говоря, весь этот кусок кода должен быть переписан. Логика обречена, потому что ваш параметр $ weekday сравнивает тот же день для $ currentTime и $ minutesOpen. Вы добавили 24 часа к $ minutesClose, чтобы подтолкнуть его к (технически ср.), Теперь это сравнение корректно. Там написано «Закрыто», потому что вы не перевели $ currentTime на 24 часа в день.

Итак, если вы просто прочитали это по-английски, вы сравнили бы 1:30 утра во вторник (который наступает сразу после ночи понедельника) с 18:30 во вторник, и это не удалось (это из-за параметра $ weekday устанавливается во вторник в $ currentTime).

Не видя, как вы заполняете свой параметр $ weekday, я предполагаю, что когда вы действительно запустите этот код, например, с помощью функции date (), в 12:01 (во вторник) он будет увеличиваться до wed, тогда ваш код будет заполнять время открытия и закрытия часами wed, которые тоже будут выключены.

Извините, я знаю, что это не решение, говорящее о переписывании всей логики, но оно будет иметь серьезные недостатки в производственной среде.

Если вы просто хотите, чтобы это работало, придерживаясь мышления / контекста «вторника», вы должны отразить текущее время в смысле вторника, то есть 25:05 означает 1:05 для ср, а не 01:05 вторник во второй раз. Это поддерживает правильный контекст и работает.

   $currentTime = ($weekday - 1) * 1440 + "25" * 60 + "05";
0 голосов
/ 09 декабря 2011

Вы сравниваете текущее время с периодом открытия, который начнется в день текущего времени. Но магазин в настоящее время открыт из-за периода открытия, который начался вчера. Просто сравните со вчерашним периодом:

if ((($currentTime >= $MinutesOpen - 1440) && ($currentTime < $MinutesClose - 1440)) || (($currentTime >= $MinutesOpen) && ($currentTime < $MinutesClose))) {

Но будьте осторожны, это работает, только если магазин открывается / закрывается каждый день в одно и то же время.

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