Регионы с указанием часового пояса каждого региона.
2) В регионе есть Филиалы (One to one)
3) В филиале есть Сеансы (One to one)
4) У каждого сеанса есть дата и времся $table->timestamp('datetime'), сохраняется в UTC
Мне нужно сделать выборку из базы всех сеансов, которые находятся в диапазоне от, допустим, 14 до 18 часов.
Тут заюзал такую конструкцию
if($times = Arr::get($filters, 'timerange')) {
$query->whereTime('datetime', '>=', Carbon::parse($times[0])->toTimeString());
$query->whereTime('datetime', '<=', Carbon::parse($times[1])->toTimeString());
}
НО! Я такой выборкой получаю сеансы без учетам часового пояса.
А мне нужно получить сеансы, которые попадают в выбранный диапазон времени по часовому поясу региона, где сеанс проводится.
Т.е. я не могу просто скорректировать время на какой-то один часовой пояс, мне нужно получит сеанс в 15 часов в Питере и сеанс в 15 часов в Кемеров, например.
Что вообще делать?
так если ты хранишь в UTC то и ищи по UTC
В таблице регионов есть часовой пояс? Если нет,добавь и делай выборку сеансов with регионы
на ум приходит толькой такой ход: 1. выбрать нужные регионы. 2. найти в ргеионах мин макс по часовым поясам. мин часовой пояс перемножить с минимальным временем (которое "от") для получения timestamp. тоже для максимума. 3. выбрать все сеансы которые поподают в нужный фильтр. 4. проставить все связи от сеансов к регионам. 5. последняя фильтрация - проверяем попадают ли сеансы заданные часы согласно часовым поясам того региона к которому привязаны
Обсуждают сегодня