Когда PBS (Система общественного вещания США) столкнулась с этой же проблемой пару лет назад, они изобрели идею «30-часового дня» - где 00:00 - полночь в начале дня, 24: 00 - полночь в конце дня, 25:00 - 1:00 следующего дня, 30:00 - 6:00 следующего дня. Таким образом, понедельник закрывается в 26:00 утра по вторникам.
Вместо двух записей, представляющих время одного магазина за день, он может быть более объектно-ориентированным, чтобы воспринимать «день магазина» как объект. Таким образом, 1 запись = 1 магазин за день. Если вы хотите сохранить два набора времени открытия / закрытия, просто используйте четыре поля в записи вместо двух - и скорректируйте свои запросы соответствующим образом.
Помните, что ваши запросы должны использовать библиотеку / API, которую вы пишете и публикуете. Затем библиотека будет иметь дело с хранилищем данных и его макетом данных. Никто, кроме вашей библиотеки, не должен смотреть на БД напрямую.
Часовые пояса также очень важны для такого рода приложений. (Надеюсь) в какой-то момент сеть магазинов расширится и охватит более одного часового пояса. Затем вам нужно будет определить местное время запроса. - Может не совпадать с часовым поясом вашего сервера, который обрабатывает запросы.
Дальнейшие мысли -
Теперь я вижу, что вы стандартизируете время по Гринвичу. Хорошо. Вы также можете использовать значения даты и времени (против значений времени) и стандартизировать для данной недели во времени. Например, в нерабочее время 1 января 1995 г. 10:00 - понедельник 2 января 1995 г. 2:00 (используя базу 1 января 1995 г., так как это было воскресенье).
Затем рационализируйте свои "текущее время и дату", чтобы они совпадали с той же точкой на неделе 1 января 1995 года. Затем выполните запрос, чтобы найти дни открытых магазинов.
НТН,
Larry