12

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

我尝试执行以下操作:

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

我明白(-1/1)了,类的对象Rational

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

Rational当我像这样减去 DateTimes 时,这意味着/代表什么?

顺便提一句:

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

4

2 回答 2

13

当您减去两个 datetime时,您会得到天数的差异,而不是小时数。

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

这是官方文档的链接

于 2015-06-20T12:49:39.627 回答
11

如果您将它们作为 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
于 2015-06-20T12:49:14.927 回答