В Laravel есть прекрасный пакет по работе с датами — Carbon. Я долгое время подозревал, что он мне поможет решить проблему с временными зонами на сайте — все временные метки хранятся в UTC, однако выводить данные и фильтровать нужно с учетом временной зоны пользователя (то есть из браузера).

Не стану рассказывать каким образом я получаю временную зону (может быть, напишу об этом позже), опишу вкратце как я добился хранения даты в UTC  и прозрачной работе пользователя с фильтрами времени.

Для фильтрации по времени использую следующий код:

Полученный объект  Carbon я отправляю в метод Where.

Для вывода же данных в нужной временной зоне, я использую мутаторы в Eloquent:

Временную метку я храню в сессии (напрямую использую только в качестве примера)