2012-09-19 63 views
0

我有一個紅寶石應用程序,我需要以天 - 小時 - 分鐘格式獲取日期 - 時間差。對於這個即時通訊使用下面的函數ROR中的日期時間差

def duration (from_time, to_time) 
    from_time = from_time.to_time if from_time.respond_to?(:to_time) 
    to_time = to_time.to_time if to_time.respond_to?(:to_time) 
    distance_in_seconds = ((to_time - from_time).abs).round 

    secs = distance_in_seconds.to_int 
    mins = secs/60 
    hours = mins/60 
    days = hours/24 

    if days > 0 
    "#{days}d #{hours % 24}h" 
    elsif hours > 0 
    "#{hours}h #{mins % 60}m" 
    elsif mins > 0 
    "#{mins}m" 
end 
end 

上面這樣調用從另一個功能

duration(aw_updated, Time.now) 

但有些時候它給了我錯誤的結果,

當我顯示上述數值

aw_updated is 2012-09-19 04:23:34 UTC 
Time.now is 2012-09-19 16:33:09 +0530 
Time.now.utc is 2012-09-19 11:03:09 UTC 

And

Diff is 6h 26m 

但是我的系統時間爲2012-09-19 16點33分09秒

不知道在哪裏在做錯誤的,有些UTC問題?

請指教

+0

對我來說看起來很好。您的系統時間顯示UTC + 5.30 – Sebi

+0

差異不應超過12小時? –

+0

04:23:34和11:03:09之間的區別是6h:39m:35s。嘗試再次運行代碼併發布輸出。 – Sebi

回答

0

爲正確答案你的兩個時間應該有相同的時區utc在這種情況下

所以它轉換2012-09-19 16:33:09 +0530utc這給2012-09-19 11:03:09 UTC,因此不同的是DIFF爲6h26米

+0

我明白了,謝謝........ –

0

將輸入這個作爲評論,但還不能。

我沒有詳細看過你的功能,但是你必須從頭開始構建它嗎?你爲什麼不使用Ruby構建的DateTime類。您可以將字符串解析爲DateTime對象,進行計算並使用strftime方法以您想要的格式輸出時間