Ruby on rails 返回DateTime减法中的分钟数

Ruby on rails 返回DateTime减法中的分钟数,ruby-on-rails,ruby,datetime,Ruby On Rails,Ruby,Datetime,下面返回(5/12),一个Rational对象 d = DateTime.current d2 = d + 10.hours d2 - d 我如何从两个时间点中得到分钟差呢?日期时间最终都只是一个单独的数字,浮点数或整数,数字代表自纪元以来的秒数。当你做加法和减法运算时,它就是在用这些数字做数学运算,如果结果是datetime有意义的话,它通常会返回一个datetime,但如果不是,它只会返回数字 当你从另一个时间中减去一个时间时,差值是秒数。Rational类是一种将数字作为分数而不是浮点数

下面返回
(5/12)
,一个
Rational
对象

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

我如何从两个时间点中得到分钟差呢?

日期时间最终都只是一个单独的数字,浮点数或整数,数字代表自纪元以来的秒数。当你做加法和减法运算时,它就是在用这些数字做数学运算,如果结果是datetime有意义的话,它通常会返回一个datetime,但如果不是,它只会返回数字

当你从另一个时间中减去一个时间时,差值是秒数。
Rational
类是一种将数字作为分数而不是浮点数或整数保存的方法

调用
到i
到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
:有理数可以表示为成对整数;a/b(b>0)。其中a是分子,b是分母。整数a在数学上等于有理数a/1


为什么用60.0除以(d2-d)可能重复?为了使这一点绝对明显,请将
60.0
替换为
1.minute
。你计算时间跨度,然后除以一分钟。。。有效地获得适合它的分钟数。@D-side但OP想要获得分钟数difference@pangpang是的,它就是这样做的。怎么了?嗯。检查这个。它确实失败了。
(d2 - d).class
=> Rational
d2 - d
=> (5/12)  #get the number of days

((d2 - d) * 24 * 60).to_i
=> 600    # get the number of minutes
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