2015-09-25 67 views
3

以下返回(5/12)Rational對象。在DateTime減法中返回分鐘

d = DateTime.current 
d2 = d + 10.hours 
d2 - d 

如何我會得到來自兩個時間點的微小差別?

+2

可能重複http://stackoverflow.com/questions/2852605/subtract-dates-in-ruby-and-get - 分鐘 - 分鐘) – IngoAlbers

回答

1
(d2 - d).class 
=> Rational 

Rational:有理數可以表示爲成對的整數; a/b(b> 0)。 a是分子,b是分母。整數等於理性a/1在數學上。

d2 - d 
=> (5/12) #get the number of days 

((d2 - d) * 24 * 60).to_i 
=> 600 # get the number of minutes 
1

DateTimes最終只是一個數字,浮點數或整數,數字代表自時代以來的秒數。當你做加法和減法時,它會用這些數字做數學運算,如果結果是一個日期時間是有意義的,它通常會返回一個日期時間,但如果沒有,它只會給你回數字。

當你從另一個時間中減去一個時間,差異是秒數。 Rational類是一種將數字作爲分數而不是Float或Int的方法。

調用to_ito_f將根據您的要求將數字轉換爲int或float。然後你有幾秒鐘的時間,你可以將它分成60分鐘。

小心這個問題:在ruby中,如果你用int除int,它會將結果舍入爲整數。例如:

90/60 
=> 1 

如果你想返回浮點數,在這種情況下爲1.5,確保至少有一個操作數是浮點數。

所以,這應該工作:

d = DateTime.current 
d2 = d + 10.hours 
diff_minutes = (d2 - d)/60.0 
+0

你爲什麼用(d2-d)除60.0? – pangpang

+0

爲了使這一點非常明顯,請用'1.minute'替換'60.0'。您計算時間跨度,然後將其分爲一分鐘......以獲得適合的分鐘數。 –

+0

@ D方,但OP希望得到微小差異 – pangpang

1
date_diff = date_2 - date_1 
date_diff_array = Date.day_fraction_to_time(diff) # => [h, m, s, frac_s] 

date_diff_array[0] # hours 
date_diff_array[1] # minutes 
date_diff_array[2] # seconds 
的[減去日期在Ruby和獲得分鐘之差(