За последние 24 часа нас посетили 18189 программистов и 1606 роботов. Сейчас ищут 934 программиста ...

Режимы работы

Тема в разделе "PHP для новичков", создана пользователем keaks88, 12 июн 2017.

  1. keaks88

    keaks88 Новичок

    С нами с:
    13 июн 2015
    Сообщения:
    37
    Симпатии:
    0
    ребят доброго времени суток. Так и не смог найти пример реализации режима работы как на Facebook.

    Суть в том, допустим я заношу в бд режим начала работы заведения и во сколько оно закрывается. На выходе хочу получить что-то типа этого.

    С 09:00 до 18:00
    Сейчас работает

    За час до закрытия выводим,
    С 09:00 до 18:00
    Закроется через час

    Если время не рабочее, то

    С 09:00 до 18:00
    Сейчас закрыто

    За час до открытия,
    С 09:00 до 18:00
    Откроется сегодня в 09:00
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    А что тут сложного?
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    если вы не можете усвоить условия в программирование. То жизнь айтишника не для вас
     
  4. keaks88

    keaks88 Новичок

    С нами с:
    13 июн 2015
    Сообщения:
    37
    Симпатии:
    0
    Я понимаю что нужно делать условие, но как это реализовать
    С этим у меня все хорошо, их всего приведенного меня больше интересует как высчитывать время до открытия заведения
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.866
    Симпатии:
    753
    Адрес:
    Татарстан
    Все очевидно. Если текущее время больше чем время закрытия, но не более чем на час то пишем что закрылось час назад, то же самое с открытием остальное не работает
     
  6. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    Если все как написано в первом посте)) без учета минут, то проще всего вот так вот наверно)
    PHP:
    1. $now = date("H");
    2.  
    3. for($n = 0; $n < 25; $n++){
    4.     getWorkStatus($n);
    5. }
    6.  
    7.  
    8. function getWorkStatus($now){
    9.     $t1 = 9;
    10.     $t2 = 18;
    11.     echo 'Сейчас ' . $now . ':00 - ';
    12.     if ( ($now + 1) >= $t2 && $now < $t2 ) {
    13.         echo 'Закроется меньше чем через час<br />';
    14.     } elseif( $now >= $t1  && $now < ($t2 - 1) ){
    15.         echo 'Сейчас работает<br />';
    16.     } elseif ( $now >= ($t1 - 1) && $now <= $t1 ) {
    17.         echo 'Откроется сегодня в 09:00<br />';
    18.     } elseif ( $now >= $t2 || $now <= $t1) {
    19.         echo 'Сейчас закрыто<br />';
    20.     }    
    21. }
     
  7. keaks88

    keaks88 Новичок

    С нами с:
    13 июн 2015
    Сообщения:
    37
    Симпатии:
    0
    Заметил такое, если допустим проставить режим работы с 08:00 и до 01:00, то пишет что организация не работает.
    Есть еще вопрос, допустим если я ставлю режим работы с 08:00 до 08:00 то нужно вывести что работает круглосуточно. Сравнивал первое и второе время, результата нет.
     
  8. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    ну как было поставлено условие так я и привел пример)) вопрос в том что задача была поставлена неверно)) нельзя писать закроется через час если до закрытия осталась одна минута)) тут надо не с числами работать, а сравнивать периоды времени и писать в минутах сколько осталось.. .
     
  9. keaks88

    keaks88 Новичок

    С нами с:
    13 июн 2015
    Сообщения:
    37
    Симпатии:
    0
    Ну это я сделал, пишется в минутах сколько осталось до закрытия. Единственное не могу понять по выше заданному мною вопросу
     
  10. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    в самом начала поставить условие если t1 = t2 то работает круглосуточно..

    ну мы сравниваем в данном примере не время, а числа.. и 1 заведомо меньше 8...
    как вариант поставить в самом вверху отдельное условие если t1меньше t2 до добавить 12... но это костыль и не красиво))
    мне кажется лучше бы делать сравнение дат где уже будет видно где сегодня а где завтра..
     
  11. keaks88

    keaks88 Новичок

    С нами с:
    13 июн 2015
    Сообщения:
    37
    Симпатии:
    0
    Код (Text):
    1. elseif ( $t1 = $t2 ) {
    не сработало, условие другое выбирается, пишет мол закрыто. Хотя и тут все прописано.

    А про сравнение дат можно поподробнее? может где пример можно посмотреть
     
  12. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    вот класс даты и времени https://php.ru/manual/class.datetime.html
    куча примеров в инете как он работает.. я пару раз что то делал на нем.. вроде удобно.
     
  13. keaks88

    keaks88 Новичок

    С нами с:
    13 июн 2015
    Сообщения:
    37
    Симпатии:
    0
    Не получается у меня понять. Суть вот в чем, даты я вообще нигде не использую. Можно конечно подставлять сегодняшний день и к нему плюсовать +1 день если время до скольки работает более 00:00 часов. Но вот загвоздка в том как это лучше реализовать...
     
  14. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Возможно Вам проще тогда будет заполнять не время работы с-по, а со скольки и как долго? Например, работаем с 17. Работаем 8 часов. Это означает
    17..17+8
    17..25
    17..25%24
    17..1
    17:00..01:00

    Текущий статус проверяете заданным числом. Находится ли оно любо оно+24 в диапазоне 17..25
    Например для 0, 20, 23, 1 прлверяете
    Входит ли 0 или 0+24(24) в диапазон 17..25
    Входит ли 20 или 20+24(44) в дипазон 17..25
    Входит ли 23 или 23+24(47) в дипазон 17..25
    Входит ли 1 или 1+24(25) в дипазон 17..25
     
  15. keaks88

    keaks88 Новичок

    С нами с:
    13 июн 2015
    Сообщения:
    37
    Симпатии:
    0
    Что то совсем голова едет. Получается варианта нет высчитывать именно по времени которое изначально у меня указано? 10:00 - 02:00 что бы после полуночи считало что наступили новые сутки и 02:00 не было меньше чем 10:00
     
  16. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Можно. При проверке добавляйте к времени закрытия +24 часа, если оно меньше времени открытия. И проверяйте тогда также два числа по одному заданному. Само число и число+24
     
  17. keaks88

    keaks88 Новичок

    С нами с:
    13 июн 2015
    Сообщения:
    37
    Симпатии:
    0
    Спасибо, с этим ясно. А как быть если время открытия добустим 08:00 и закрытия 08:00 нужно как то вычислить что тут уже круглосуточная работа
     
  18. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Тогда добавляйте +24 часа к времени закрытия когда оно меньше или равно времени открытия