В базе хранятся данные о времени работы компании в формате: 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) Искал варианты, нашел массу вопросов по этому поводу, но ответа так и не нашел.
Как можно решить данный вопрос? Спасибо.
<?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";
}
поиграться тут
Если конечное время меньше начального, то надо проверять два диапазона через ИЛИ - от начального до полуночи (24:00) и от полуночи (00:00) до конечного.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Начал открывать для себя symfony2Решил прикрутить oAuth2 (FOSOAuthServerBundle), сделал всё по доке
Я добавил себе канал на сайт, но я даже не имею представления как проверить он ведет сейчас трансляцию или нет
Здравствуйте, пытаюсь написать простенький скрипт на php который должен: