У меня есть вся необходимая информация о часовом поясе, и она правильно сохраняет всю информацию в соответствии с this railscast . Все отлично работает для всех обычных целей, таких как отображение времени в таблице, однако мне интересно, как я могу преобразовать следующее в current_users
сохраненный часовой пояс.
У меня есть общее количество вызовов в час:
Calls.count(:group => DATE_PART('hour', start_time),
:conditions => ["start_time BETWEEN ? AND ?", start, finish]
Этот запрос извлекает все звонки, которые были сделаны за час между временем начала и окончания. Единственное, что он тянет время назад в базе данных, которая хранится как UTC. Я написал свой собственный маленький метод преобразования с Time.now.utc_offset
, но понял, что это не сработает. Что было бы хорошим способом сравнить сохраненные пользователи time_zone
с тем, что идет из базы данных, и добавить utc_offset
.
time_zone
сохраняется в виде строки в базе данных Восточное время (США и Канада) .
Каков наилучший способ выяснить это, я могу изменить, чтобы сохранить смещение пользователя в базе данных, но прежде чем я сделаю это, я бы предпочел посмотреть, есть ли более простой способ.
Редактировать
Чтобы быть более понятным, запрос возвращает хэш часов и количество. Так, например:
Hour Count
"5" 20
"6" 15
"7" 35
... ...
Час возвращается как часовой пояс UTC, мне нужно преобразовать эту цифру в часовой пояс пользователя, поэтому, например, если это Восточное время (США и Канада), вы перебираете хеш и добавляете -4 к час.
Редактировать 2
Благодаря Энди я смог понять это довольно просто. Первое, что вы хотите сделать, это установить для объекта Time текущий часовой пояс пользователя. Итак:
Time.zone = @current_user.time_zone
=> "Eastern Time (US & Canada)
Затем добавьте смещение текущего пользователя к «Часу» внутри хеша
hour + Time.now.in_time_zone.utc_offset / 3600
Довольно понятен, но он получает время зоны, которую вы установили ранее, и находит смещение UTC в секундах, поэтому мы делим на 3600.