要了解什麼是你的代碼錯誤,讓我們通過一個執行它一個:
▶ Time.parse('08:00') - Time.parse('12:00')
# => -14400.0
秒,呵呵。精細。
▶ Time.at(Time.parse('08:00') - Time.parse('12:00'))
=> 1969-12-31 21:00:00 +0100
哇。所以,Time.at
不是我們夢想的方法。此外,我不知道標準庫中的方式是從秒數中獲得格式爲%H:%M
的小時。但是:
▶ sprintf "%+03i:%02i", -14400/3600, -14400/60 % 60 # hours, minutes
# => "-04:00"
唯一的問題仍然是一個標誌。總結:
▶ time1 = '06:28'; time2 = '12:00'
▶ diff = Time.parse(time1) - Time.parse(time2)
▶ sprintf "%+03i:%02i", (diff/diff.abs) * (diff.abs/3600), diff.abs/60 % 60
# => "-05:32"
希望它有幫助。
UPD:對於那些,誰喜歡的monkeypatching:
class Time
def diff_hours other
return nil unless Time === other
diff = self - other
sprintf "%+03i:%02i", (diff/diff.abs) * (diff.abs/3600), diff.abs/60 % 60
end
end
# => :diff_hours
▶ Time.parse('06:32').diff_hours Time.parse('12:00')
# => "-05:28"
你所說的 「時間1爲正,時間2負」 呢? – sawa 2014-10-17 11:21:50
想象一下工作時間,一天工作8小時,另一天我錯過了12小時,現在很清楚? – brunozrk 2014-10-17 11:24:05
您可能會發現我編寫的這個課程很有幫助:https://github.com/SKoschnicke/timespan/blob/master/time_of_day.rb – 2014-10-17 11:45:16