Как можно реализовать вывод свободного для записи времени на php?

Доброго времени суток.
Есть автомойка и есть ее сайт, где можно записать на свободное время.
Автомойка работает с 8 до 20 часов. Может принимать клиентов каждые 30 минут. Т.е список времени для записи таков: 8:00, 8:30, 9:00, 9:30....и т.д. Так же есть два вида услуг. Обычная мойка - занимает 30 минут времени и комплексная, рассчитанная на 1 час. Данные о записи хранятся в базе таким образом: id, phone, date (это датаd-m-Y) и time (время H:i).
Вот нужно показывать посетителю свободное для записи время.
Это я сделал, но вопрос в нюансе, внимание:
Каким образом сформировать список времени в такой ситуации, когда 16:00, 16:30 - занято. 17:00 - свободно, 17:30 занято. Следовательно, человек не может записаться на комплексную мойку на 17:00, потому что для нее нужен час.

Как определить в таком случае что 17:00 не доступно?

Да и на сайте, прежде чем выводить время доступен выбор мойки: обычная или комплексная. После этого выбора должен формироваться список доступного времени.
  • Вопрос задан
  • 873 просмотра
Пригласить эксперта
Ответы на вопрос 1
OKyJIucT
@OKyJIucT
Sunshine reggae
Я бы создал еще одну таблицу, примерно с такой структурой

id - AUTOINCREMENT
type - ENUM('1', '2') // тип мойки - обычная, комплексная
time - string // время начала процедуры, например, 10:30
date - string // дата процедуры, например, 26.01.2018
busy - ENUM('1', '0') // занято ли время уже или нет
client_id - int // айди для связи с первой таблицей, чтобы было понятно кто занял время, если оно занято

При создании первой записи на определенную дату (когда на эту дату еще нет записей) создаем сразу все получасовые промежутки, и по мере занятости отмечаем их занятыми. Если на выбранную дату не созданы временные промежутки, значит все свободно.

И таким образом на каждый день выбираем все промежутки, сразу видим, какие заняты, какие нет, какой тип мойки занял (чтобы занимать на час вперед, если комплексная либо показывать, что комплексная недоступна, если свободное окно всего одно).

А первую таблицу оставить просто списком клиентов, без даты и времени. При необходимости, можно посмотреть, когда кто мыл машину.

Это так, навскидку, наверняка в процессе еще какая-то оптимизация придет в голову.
Ответ написан
Ваш ответ на вопрос

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

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