Задать вопрос

Как правильно сравнить время в php и вывести true или false?

Есть время открытия магазина: 8:00 и время закрытия: 23:00, а также реальное время в данный момент.
Нужно выполнить php скрипт, который будет возвращать true или false через return(это важно).
true - если магазин открыт.
false - если магазин закрыт.

Пробую так:
<?php
    $start_work = "08:00";
    $end_work = "23:00";
    $currentTime = date("H:i:s");
    
    //текущее время с датой, даже если оно 12:00 все равно имеет дату!
    $currentDateTime = strtotime(date('Y-m-d')  ." ". $currentTime); 
    //Дата и время во сколько мы закрылись вчера
    $previousDayEnd;
    //Дата и время во сколько мы открылись сегодня
    $startDateTime;
    //Дата и время во сколько мы закрылись сегодня
    $endDateTime;
    
    $startDateTime = strtotime(date('Y-m-d')  ." ". $start_work);
    
    if (strtotime($start_work) <= strtotime($end_work)){
      $endDateTime = strtotime(date('Y-m-d')  ." ". $end_work);
      $previousDayEnd = strtotime(date('Y-m-d')  ." ". $end_work . "-1 days");
    }
    
    else{
     $endDateTime = strtotime(date('Y-m-d')  ." ". $end_work . "+1 days");
     $previousDayEnd = strtotime(date('Y-m-d')  ." ". $end_work );
    }
    
    return ($currentDateTime >= $startDateTime && $currentDateTime <= $endDateTime) ? true : false;
    return ($currentDateTime < $startDateTime && $currentDateTime < $previousDayEnd) ? true : false;
    ?>

Но не выходит. В php новичок, только основы изучаю, видимо допустил ошибку...
Помогите пожалуйста)
  • Вопрос задан
  • 1982 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
myks92
@myks92 Куратор тега PHP
Нашёл решение — пометь вопрос ответом!
$now = new \DateTimeImmutable();
$startWork = new \DateTimeImmutable("08:00");
$endWork = new \DateTimeImmutable("23:00");

if ($startWork <= $now && $now <= $endWork) {
    return true;
} else {
    return false;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Вы сравниваете строки, это иногда работает, но не всегда. Лучше так:
function isOpen() {
  $now = new DateTime('now');
  $open = new DateTime('today 08:00');
  $closed = new DateTime('today 23:00');
  return ($now > $open && $now < $closed);
}

echo isOpen();
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы