2013-06-09 3 views
4

user1 is 4 hours ahead of user2을 말하고 싶습니다. 사용자가 계정에서 지정한 시간대를 기준으로 계산합니다.레일 : 시간대의 시간대 차이

다음 코드를 사용 :

time1 = Time.zone.now.in_time_zone(user1.time_zone) 
time2 = Time.zone.now.in_time_zone(user2.time_zone) 

distance_of_time_in_words time1,time2 

은 ... less than a minute의 차이를 제공합니다 - 유사하게 두 번을 뺀는 0을 제공합니다. 레일스는 분명히이 두 번을 똑같이 본다.

두 시간대의 차이를 어떻게 계산할 수 있습니까?

답변

5

time1 인스턴스를 가져 와서 utc_offset을 호출하면 UTC로부터의 오프셋 시간 (초)을 얻게됩니다. utc_offsettime2 인이 값을 조합하여 빼기를하면 초 단위로 시간차가 계산됩니다. 거기에서 당신은 당신이 좋아하는 시간 단위로 대화를 할 수 있습니다.

irb(main):020:0> time1 = Time.zone.now.in_time_zone("EST") 
=> Sun, 09 Jun 2013 07:11:46 EST -05:00 
irb(main):021:0> time2 = Time.zone.now.in_time_zone("MST") 
=> Sun, 09 Jun 2013 05:11:49 MST -07:00 
irb(main):022:0> time_difference_in_seconds = time2.utc_offset - time1.utc_offset 
=> -7200 
irb(main):025:0> (time_difference_in_seconds/60/60).abs 
=> 2 
+0

감사합니다. – christian

+4

전달하는 실제 영역에주의하십시오. "EST"및 "MST"와 같은 약어를 사용하는 경우 일광 절약 시간을 무시합니다. "동부 표준시 (미국 및 캐나다)"와 같이 전체 레일 영역 ID를 사용해야합니다. –

+3

또한, 차이가'now'의 정확한 값에 크게 의존한다는 것을 잊지 마십시오. 따라서이 결과를 저장하지 말고이 두 영역이 항상 X 시간 떨어져 있다고 가정하십시오. 필요할 때마다 실행하십시오. 아마도'now'에 의존하기보다는 문제의 날짜/시간을 전달하십시오. [이 비디오] (http://www.youtube.com/watch?v=84aWtseb2-4) 특히 3:57부터 시작하는 부분을 참조하십시오. –