ruby 2 中的日期时间减法?

DateTime subtraction in ruby 2?

我需要减去两个 DateTime 对象才能找出它们之间的小时差。

我尝试执行以下操作:

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

我得到了(-1/1),classRational的对象。

所以,问题是,我如何找出两个日期之间的区别?数小时或数天,或其他时间。

当我像那样减去 DateTimes 时,这个 Rational mean/represent 是什么意思?

顺便说一句:

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

如果您将它们作为时间对象进行减法,它将 return 以秒为单位得出结果,然后您可以相应地相乘得到 minutes/hours/days/whatever.

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

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

你得到一个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