Сравнение времени PHP (H:m)

418
18 января 2017, 02:56

В базе хранятся данные о времени работы компании в формате: 09:00,18:30; 12:00,02:00 и т.д. Необходимо сравнить текущее время с двумя промежутками (начало/конец рабочего дня) и если текущее время находится между рабочем времени, вернуть true, в противном случае false.

Конвертирую и пытаюсь сравнить так:

$start = strtotime($start_work);
$end = strtotime($end_work);
if ($current_time >= $start && $current_time <= $end) {
  ...
} else {
  ...
}

Как работает

компания работает с 08:30 до 18:00, а текущее время 12:00. В данном случае все отлично. Все корректно отображается

Как не работает

компания работает с 08:30 до 02:00, а текущее время 12:00.

В общем проблема если любое время после полуночи. т.к. оно по сути меньше (от 0) Искал варианты, нашел массу вопросов по этому поводу, но ответа так и не нашел.

Как можно решить данный вопрос? Спасибо.

Answer 1
    <?php
       //Ваши входные данные
      $start_work = "08:00";
      $end_work = "02:00";
      $currentTime = "01:00";
      //текущее время с датой, даже если оно у вас 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 );
 }
 //проверить полученные результаты 
  echo "Мы закрылись в : " .  date("Y-m-d H:i:s", $previousDayEnd). "\n";
 echo "Открытие : " . date("Y-m-d H:i:s", $startDateTime) . "\n"; 
 echo "Закрытие  : " .  date("Y-m-d H:i:s", $endDateTime). "\n"; 
if ($currentDateTime >= $startDateTime && $currentDateTime <= $endDateTime) {
 echo "Сейчас рабочее время : " . date("Y-m-d H:i:s", $currentDateTime) ."\n";
} 
else if($currentDateTime < $startDateTime && $currentDateTime < $previousDayEnd ){
    echo "Сейчас рабочее время : " . date("Y-m-d H:i:s", $currentDateTime) ."\n";
}
else {
  echo "Мы закрыты в это время : " . date("Y-m-d H:i:s", $currentDateTime) ."\n";
}

поиграться тут

Answer 2

Если конечное время меньше начального, то надо проверять два диапазона через ИЛИ - от начального до полуночи (24:00) и от полуночи (00:00) до конечного.

READ ALSO
Как использовать FOSOAuthServerBundle в symfony 2.8

Как использовать FOSOAuthServerBundle в symfony 2.8

Начал открывать для себя symfony2Решил прикрутить oAuth2 (FOSOAuthServerBundle), сделал всё по доке

364
Как проверить с помощью кода, канал online или offline на twitch

Как проверить с помощью кода, канал online или offline на twitch

Я добавил себе канал на сайт, но я даже не имею представления как проверить он ведет сейчас трансляцию или нет

380
Yandex SppechKit TTS Сохранение файла

Yandex SppechKit TTS Сохранение файла

Здравствуйте, пытаюсь написать простенький скрипт на php который должен:

654
Выдаёт ошибку в коде

Выдаёт ошибку в коде

Здравствуйте! есть код, который должен получать информацию с twitch канала

372