나는 필요한 모든 표준 시간대 정보를 가지고 있으며 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
은 데이터베이스에 문자열 동부 표준시 (US & 캐나다)의 문자열로 저장됩니다.
이것을 알아내는 가장 좋은 방법은 데이터베이스에서 사용자의 오프셋을 저장하도록 변경할 수 있지만 그 전에는 더 쉬운 방법이 있는지보고 싶습니다.
더 명확하게하기 위해 편집, 쿼리 시간 카운트의 해시를 반환합니다. 그래서 예를 들면 : UTC는 시간 오프셋으로
Hour Count
"5" 20
"6" 15
"7" 35
... ...
는 시간이 돌아오고, 나는 사용자의 시간대로 그 자리를 변환해야하므로 예를 들어, 동부 표준시 (미국과 캐나다)를 통해 당신 루프의 경우 해시를 추가하고 시간에 -4를 더합니다.
편집 2
Andy 덕분에 나는 이것을 매우 간단하게 이해할 수있었습니다. 가장 먼저 할 일은 Time 객체를 현재 사용자의 시간대로 설정하는 것입니다. 그래서 :
Time.zone = @current_user.time_zone
=> "Eastern Time (US & Canada)
그런 다음 해시
hour + Time.now.in_time_zone.utc_offset/3600
예쁜 자명 내에서 현재 사용자의은 "시간"에 오프셋을 추가,하지만 그 이전에 설정 한 영역의 시간을 가져옵니다, 그리고 UTC 발견 오프셋을 초 단위로 표시하므로 3600으로 나눕니다.
질문을 해결할 수 있습니까? 사용자의 시간대와 관련하여 시작/종료 시간을 지정 하시겠습니까? 아니면 쿼리가 작성된 후 UTC 시간을 사용자의 시간대로 변환 하시겠습니까? – klochner
쿼리가 작성된 후 UTC 시간을 사용자의 시간대로 변환하십시오. – Ryan