@sincopa

Как правильно сравнить время (в заданном диапазоне) и дату (на выходной день)?

В общем суть задачи, нужно выводить сообщение в будни дни с 18 вечера и до 9 утра и в любое время выходного дня.

Есть две функции одна сравнивает время, другая проверяет на выходной день

function WeekendCheck($date) {
        return (date('N', strtotime($date)) >= 6);
    }

    function TimeCheck($date) 
    {
       $date_min = new DateTime("9:00");
       $date_max = new DateTime("18:00");
       $date_now = new DateTime($date);
       if ($date_now >= $date_min && $date_now <= $date_max) 
       {
           return true;
       }
       return false;
    }

    if (WeekendCheck("2017-10-07"))
    {
        print("Сообщение в выходной день");
    } else {
        if(!TimeCheck("8:00")) {
            print("Сообщение в будний день");
        }
    };


Этот вариант работает как надо, но есть ли варианты попроще?
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
@sincopa Автор вопроса
Как вариант. Посоветовали на другом сайте.
function TimeCheck(){
    $now = (int) (new DateTime())->format("H");
    return $now < 9 || $now >= 18;
}
function WeekendCheck(){
    $now = (int) (new DateTime())->format("w");
    return $now === 0 || $now === 6;
}
if (WeekendCheck()){
    print("Сообщение в выходной день");
} else if(TimeCheck()) {
    print("Сообщение в будний день");
};
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
Принципиально так.
Но можно по мелочам улучшить:
  1. else if объединить в elseif
  2. if условие return true; else return false; заменить на return условие;
  3. TimeCheck($date) заменить на TimeCheck($time)
  4. если часы всегда передавать двумя цифрами, то можно сравнивать строки времени, а не объекты
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
15 мая 2024, в 22:07
3000 руб./за проект
15 мая 2024, в 22:06
3000 руб./за проект
15 мая 2024, в 20:48
5000 руб./за проект