Anastasia2306
@Anastasia2306
PHP-разработчик.

Как правильно сформировать логическое условие в php?

Здравствуйте! Пишу компонент для одной CMS и я столкнулась с такой проблемой - никак не получается правильно сформировать логическое И ИЛИ, чтобы скрипт правильно работал.

Вот в чём суть:

Есть следующие переменные:

$work_time = '09:00'; // Время открытия компании
$work_end_time = '18:00'; // Время закрытия компании
$dinner_time = '13:00'; // Время начала обеда
$dinner_end_time = '14:00'; //Время окончания обеда


Как понятно из содержимого переменных - нужно выстроить логику показа определенного сообщения в зависимости от текущего времени. Например, если до открытия остается меньше часа, то выводить сообщение - откроется через N мин. Если открыто в данный промежуток времени - то выводить фразу "Сейчас открыто". Ну и если время совпадает с обедом - то выводить фразу "Сейчас обед".

Вот что я смогла сделать с временем открытия и закрытия:

<?php echo $work_time != $work_end_time && (date('H:i') > $work_end_time || date('H:i') < $work_time) ? 'Закрыто' : 'Открыто' ?>


Данное условие работает, однако, если например установить время открытия - 01:00, а время закрытия - 03:00, то логика почему-то нарушается.

Помогите реализовать данное условие. Заранее всем спасибо!
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Во первых - вы сравниваете строки, что уже хреново.
Во вторых - в правилах выставления времени уже должны быть ограничения, например что время закрытия больше времени открытия, так же с обедом, и еще надо проверить что обед попадает между закрытием и открытием.
Ну и когда вы приведете все условия в нормальный вид можно думать о логике, которая по факту проще пареной репы... ну и $work_time по уму должно быть $work_start_time, то же самое с $dinner_time.
Если все еще не ясна логика:
$work_time = [
  'work_start_time'=>'09:30',
  'work_end_time'=>'18:20',
  'dinner_start_time'=>'13:30',
  'dinner_end_time'=>'14:00',
];
$answer = 'Closed';
$date = str_replace(':','',$work_time);
$now = date('Hi');
if( $date['work_start_time'] <= $now && $now <= $date['work_end_time'] ) $answer = 'Now we open';
if( $date['dinner_start_time'] <= $now && $now <= $date['dinner_end_time'] ) $answer = 'Now we on break';
echo $answer;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@psiklop
Проверяйте
$work_time = '09:00'; 
$work_end_time = '18:00'; 
$dinner_time = '13:00';
$dinner_end_time = '14:00';
$current = intval(date("G"));
echo ($current<intval($work_time) && (intval($work_time)-$current)==1)?"Откроется через ".(60-intval(date("i")))." минут":(($current==intval($dinner_time))?"Сейчас обед":(($current+1>intval($work_end_time) || $current<intval($work_time))?"Закрыто":"Сейчас открыто"));
Ответ написан
Если минуты не нужны , то можно их отбросить и работать только с часами, как с числами. Только нужно не "09", а 9.
Если минуты нужны, то можно перевести время в минуты ( например, "9:30" -> 9*60+30) и снова работать с числами.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект