Я использую Laravel/PHP/MySQL и сохраняю все даты и время в UTC.Как рассчитать среднее время суток с учетом различий в часовых поясах?
Пользователь может выбрать часовой пояс (например, восточный), ввести дату и время, а дата и время будут преобразованы в UTC перед сохранением. При извлечении он будет преобразован в выбранный часовой пояс пользователя.
Мой вопрос: как вы можете получить среднее время суток из серии записей с учетом часового пояса (желательно в запросе базы данных)? Следующий вопрос касается среднего времени дня в PHP, но не проблемы с часовым поясом.
Вот что я делаю:
SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(flights.departed_at))))) AS average_time
Это работает для записей, которые охватывают Daylight Saving/стандартное время в регионе, который наблюдает за исключением его.
ПРИМЕР: У вас может быть запись с датой UTC 2015-08-18 11:00:00
, введенная пользователем в EDT по адресу 2015-08-18 07:00:00
. Затем у вас есть вторая запись, введенная с датой UTC 2015-11-10 12:00:00
пользователем в EST по адресу 2015-11-10 07:00:00
. Если вы попытаетесь рассчитать среднее время суток, оно должно быть равно 07:00:00
, но вместо этого результат будет 07:30:00
.
Любые идеи, как преодолеть это? Я подхожу к этому все неправильно?
Заранее спасибо.
дневной свет. На основе дат, один - 7 часов, а один - 8. Это средний показатель до 7.5 часов. –
вы храните все в utc и настраиваете только время для вывода. все остальное будет просто невероятно болезненным и крайне неэффективным, поскольку вы постоянно прыгаете между часовыми поясами, как пьяная блоха. –
@MarcB Это то, что я делаю. Я конвертирую пользовательский ввод из ETD или EST в UTC, сохраняя его, затем показываю его как ETD или EST. Проблема заключается в вычислении среднего времени от записи, введенной в EDT, и записи, введенной в EST, оба преобразованы в UTC. – CaveSpider