Есть запись на замер кухонь (дата и время) на каждый день. Клиент на сайте выбирает время и дату (сегодня + 5 дней).
Как лучше хранить в бд? Datetime?
Как сделать недоступным уже занятую дату и время замера. Например записались на замер на завтра в 15:00, чтобы на сайте это поле было disabled.
Какие идеи, господа?
Сейчас реализовано отдельными столбцами в бд (день,месяц,год,часв,минуты) - но, этоже анус :))))
У вас не только проблема с выбором формата даты, но и как хранить замеры.
Клиент на сайте выбирает время и дату (сегодня + 5 дней).
Что это значит?
У замерщика есть 5 попыток дойти до клиента в определенное назначенное время?
Как будут идти дни замера - подряд от заданной даты клиентом, или клиент может выбирает определенные дни недели (пн, ср, пт) или дни месяца (1, 5, 10, 13 число)?
Когда клиент подает заявку, бронируются все 5 дней, или только ближайший?
Сколько дней нужно замерщику, чтобы выполнить заявку?
Как долго может длиться один выезд замер?
Нужна ли возможность корректировать время последующих выездов на замер, если первый не состоялся?
Уточните эти вопросы предметной области, и сможете получить ответ, какую структуру базы вам ближе всего подойдет.
Я имею ввиду вот что.
Клиент зашел на сайт на страницу "заявка на замера". Ему дается выбор даты и времени, причем дата (от сегодня, при условии, что время на момент отправки заявки рабочее + 5 дней вперед, в каждой дате диапозон времени от 9 утра до 20:00). +Плюсом к этому, выводим доступное (не занятое другим клиентом время). Думаю так яснее.
maragon, Сколько времени отводится на прием клиента? Например я записался на 09:30, на какое ближайшее время следующий клиент сможет записаться? Есть ли перерывы на обед? Когда начинается/заканчивается рабочий?
maragon, Создай таблицу appointment (user_id, reception_time) в которую записывай идентификатор пользователя и дату записи на прием (в формате DateTime). Всю остальную логику выносите на сайт.
По уму надо хранить интервал, дата начала "замера" и дата окончания.
Но у тебя я так понимаю прибит гвоздями часовой интервал. В этом случае тебе нужно одно поле datetime.
Хранить как DateTime в MYSQL. На уровне PHP работать как с объектом DateTimeImmutable.
Запретить бронировать дату замера можно в сервисе/контроллере при записи. Для этого делаем запрос в базу данных с желаемой датой, где хранятся все записи на замер. Если ни одной записи в БД нет, значит можно позволить записаться.
Сразу скажу, что у вас не учтены даты начала и конца. Возможно есть какие-то графики (расписание) приема замеров.