如何在Ruby中找到两个时间之间的差异?

3
time_difference_in_sec = (DateTime.now - @given_time).to_i.abs

where DateTime.now : #<DateTime: 2015-09-28T19:30:35+05:30 ((2457294j,50435s,957360402n),+19800s,2299161j)>
@given_time : #<DateTime: 2015-09-28T11:30:09+00:00 ((2457294j,41409s,0n),+0s,2299161j)>

time_difference_in_sec : 0

我搜寻了很多资料,但并没有找到合适的答案。


这个问题已经有无数版本了,但是无论如何... Ruby的Date类中有一些方法,比如<<,它提供了对天数、月份和其他你想要添加或减去的单位进行加减运算的操作。 - Smar
3个回答

7
如果你想以秒为单位,可以将两者转换为时间戳,然后相减。
time_difference_in_sec = (DateTime.now.to_time.to_i - @given_time.to_time.to_i).abs

否则,您将涉及到有理数等其他答案中所看到的内容。

3

-运算符返回时间差,以秒为单位:

2.2.1 :002 > 1.day.ago - 2.days.ago
 => 86399.999778025 
2.2.1 :005 > (1.day.ago - 2.days.ago)/1.day
 => 0.9999999986567014 

4
请注意,days 方法是由 ActiveSupport 提供的,而不是 Ruby。 - Smar

3
DateTime.now - @given_time   # get the number of days
((DateTime.now - @given_time) * 24 * 3600).to_i # get seconds

(DateTime.now - @given_time).class
=> Rational

合理数:合理数可以表示为一对整数;a/b(b>0)。其中a是分子,b是分母。在数学上,整数a等于有理数a/1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接