ruby 2中的DateTime减法?

时间:2015-06-20 12:24:04

标签: ruby datetime ruby-2.2

我需要减去两个DateTime个对象,以便找出它们之间的小时差异。

我尝试执行以下操作:

a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)
puts a - b

我得到(-1/1),类Rational的对象。

所以,问题是,如何找出这两个日期之间的差异是什么?几小时或几天,或其他什么。

当我减去DateTimes时,这个Rational是什么意思/代表什么?

顺便说一句:

当我尝试减去DateTime的差异为1年时,我得到(366/1),所以当我(366/1).to_i时,我会得到天数。但是当我尝试减去两个DateTime的差异为1小时时,它给了我-1小时数。那么,我如何找出返回值的意义(小时,天,年,秒)?

2 个答案:

答案 0 :(得分:11)

当您减去两个日期时间时,您将获得天数,而不是小时数。

你得到一个Rational类型的精度(一些浮点数不能用计算机精确表示)

要获得若干小时,请将结果乘以24,将分数乘以24 * 60等...

a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)

(a - b).to_i 
# days
# => -1

((a - b)* 24).to_i  
# hours
# => -24
# ...

Here's a link to the official doc

答案 1 :(得分:9)

如果你把它们作为Time对象进行减法,它会在几秒钟后返回结果,然后你可以相应地乘以得到分钟/小时/天/等等。

a = DateTime.new(2015, 6, 20, 16)
b = DateTime.new(2015, 6, 21, 16)
diff = b.to_time - a.to_time    # 86400
hours = diff / 60 / 60          # 24