在DateTime减法中返回分钟

时间:2015-09-25 13:34:28

标签: ruby-on-rails ruby datetime

以下内容返回(5/12)Rational个对象。

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

我如何从两个时间点得到微小的差异?

3 个答案:

答案 0 :(得分:1)

DateTimes最终只是一个数字,浮点数或int,在引擎盖下,数字表示自纪元以来的秒数。当你进行加法和减法时,它使用这些数字进行数学计算,如果结果是日期时间,它通常会返回一个日期时间,但如果没有,它只会返回数字。

当您从另一个时间减去时间时,差异是秒数。 Rational类是一种将数字保存为分数而不是Float或Int的方法。

调用to_ito_f会将数字转换为int或float,具体取决于您的要求。然后你有几秒钟的时间,你可以把它除以60分钟就可以把它转换成几分钟。

注意这个问题:在ruby中,如果将int除以int,它将向下舍入结果以使其保持为int。例如

90/60
=> 1

如果你想要一个浮点数,在这种情况下为1.5,请确保该除法的至少一个操作数是浮点数。

所以,这应该有效:

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

答案 1 :(得分:1)

(d2 - d).class
=> Rational
  

Rational:有理数可以表示为成对的整数; a / b(b> 0)。其中a是分子,b是分母。整数a等于理性a / 1数学。

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

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

答案 2 :(得分: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