Как реализовать хранение времени работы заведения в бд (структура)
Хочу реализовать что-то подобное
Интересует вопрос хранения этих данных в БД
Как их правильно расположить, при этом, чтобы можно было реализовать поиск по времени
Может и ошибаюсь, но как по мне можно хранить просто так
week_day | time_start | time_end
week_day можно хранить в формате числа 0=Воскресенье, 1=Понедельник и т.д. или в каком угодном порядке, потом можно сделать Accessor который возвращает по индексу человекопонятное имя.
time_start и time_end в формате как на первом скриншоте(09:30, 22:05 и т.д.)
Если диапазон находиться в диапазне между $start и $end
$users = Model::where([
['time_start', '>=', $start],
['time_end', '<=', $end]
])->get();
Если текущее время находиться в диапазоне
$now = now()->format('H:i'); // Приводит к формату 11:45
$users = \App\User::where([
['time_start', '<=', $now],
['time_end', '>=', $now]
])->get();
Если нужна привязаность к временной зоне, то надо хранить в UTC, при сохранении переводить с таймзоны пользователя в UTC и при выводе выводить по таймзоне пользователя.
Если в конфиге timezone UTC, то вот примеры:
Сохранение в UTC:
$userTZ = 'Europe/Kiev';
$timeStr = \Carbon\Carbon::createFromFormat('H:i', '13:20')
$result = \Carbon\Carbon::parse($timeStr, $userTZ)->tz('UTC')->format('H:i')
Вывод по таймзоне пользователя:
$result = \Carbon\Carbon::createFromFormat('H:i', '13:20')->tz($userTZ)->format('H:i')
Сборка персонального компьютера от Artline: умный выбор для современных пользователей