PHP — Как проверить, находится ли текущий день / время между двумя днями недели, включая время (от — до)

#php #mysql #date

#php #mysql #Дата

Вопрос:

Мне нужно проверить, находятся ли текущая дата и время между двумя будними днями, которые включают время (от и до). В БД может быть несколько записей, и дни недели хранятся через PHP date(‘N’), где с 1 (для понедельника) по 7 (для воскресенья), а также час — минута хранятся через time .

Например, сохраненное правило может быть следующим: week_day_from: 5 (пятница) week_hour_from: 16:00:00 week_day_to: 7 (воскресенье) week_hour_to: 18:00:00

или даже week_day_from: 7 (воскресенье) week_hour_from: 10:00:00 week_day_to: 2 (вторник) week_hour_to: 12:00:00

Как я могу определить, применяется ли текущий день / время в одном из правил? Основная идея состоит в том, чтобы скрыть некоторые результаты, если применяется одно из правил (т.е. Не показывать этот прием пищи после 16:00 пятницы и до 18:00 воскресенья).

заранее благодарю вас

Ответ №1:

Функция getdate предоставит вам более точную информацию. Функция getDate() вернет массив, содержащий информацию о дне недели и времени. Имея интервал, вы можете определить, применяется ли он.

Комментарии:

1. Спасибо за ваш ответ, да, strtotime применяется для текущей даты / времени, но как я могу применить это для каждого заданного правила, которое не является конкретной датой (т. Е. Каждую пятницу или каждый понедельник)?

2. Я согласен, тогда getdate предоставит вам более точную информацию. Функция getDate() вернет массив, содержащий информацию о дне недели и времени.

3. Используя getDate, вы знаете, какой сегодня день, номер секунды с 1970 года и какой сейчас день недели. Затем вы можете рассчитать, используя количество секунд, если оно находится в пределах диапазона, указанного вами выше.

4. Моя проблема заключалась в том, чтобы определить диапазон, текущий день недели и секунды с 1970 года на сегодняшний день — это не проблема. Хитрость заключалась в том, чтобы получить диапазон дней недели (от — до) из базы данных и применить в соответствии с текущим днем / датой. Мой подход к псевдо-датам до сих пор работает нормально, я использовал strtotime, так как был с ним хорошо знаком. Я попробую использовать подход getDate и отчитаюсь. Спасибо тебе, Скайуокер

Ответ №2:

кое-что нашел….

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

Я бы гораздо лучше предпочел решение на основе запросов MySQL, а не извлекать все правила и сравнивать, но я не могу найти способ. Я был бы признателен, если бы вы проверили мой код и сказали мне, что вы думаете. Недостаток может быть возможен…

     $daynow = date("N"); //$daynow = 7;
    $datetimenow = date("d-m-Y G:i:s"); 

    if($row['week_day_from'] > $row['week_day_to'])
    {// case from saturday(6) to thursday(4)
        if($daynow == 7)
        {
        $check_from = date("d-m-Y", strtotime("Sunday   ".$row['week_day_from']." Days - 1 week"));
        $check_to = date("d-m-Y", strtotime("Sunday   ".$row['week_day_to']." Days"));
        }
        else
        {
        $check_from = date("d-m-Y", strtotime("Sunday   ".$row['week_day_from']." Days - 2 week"));
        $check_to = date("d-m-Y", strtotime("Sunday   ".$row['week_day_to']." Days - 1 week"));
        }
    }
    else
    {// case from thursday(4) to saturday(6)
        if($daynow == 7)
        {
        $check_from = date("d-m-Y", strtotime("Sunday   ".$row['week_day_from']." Days"));
        $check_to = date("d-m-Y", strtotime("Sunday   ".$row['week_day_to']." Days"));
        }
        else
        {
        $check_from = date("d-m-Y", strtotime("Sunday   ".$row['week_day_from']." Days - 1 week"));
        $check_to = date("d-m-Y", strtotime("Sunday   ".$row['week_day_to']." Days - 1 week"));
        }
    }

    if
    (
        strtotime($datetimenow) >= strtotime($check_from." ".$row['week_hour_from'])
        AND 
        strtotime($datetimenow) <= strtotime($check_to." ".$row['week_hour_to'])
    )
    {
    //RULE APPLIES
    }