两个时间实例之间的天数

时间:2012-03-07 19:52:14

标签: ruby date time

如何确定Ruby中两个时间实例之间的天数?

> earlyTime = Time.at(123)
> laterTime = Time.now
> time_difference = laterTime - earlyTime

我想确定time_difference中的天数(我不担心几天的时间。上下调整很好)。

8 个答案:

答案 0 :(得分:39)

两次的差异以秒为单位。将其除以24小时内的秒数。

(t1 - t2).to_i / (24 * 60 * 60)

答案 1 :(得分:16)

require 'date'
days_between = (Date.parse(laterTime.to_s) - Date.parse(earlyTime.to_s)).round

修改 ...或更简单......

require 'date'
(laterTime.to_date - earlyTime.to_date).round

答案 2 :(得分:7)

earlyTime = Time.at(123)
laterTime = Time.now
time_difference = laterTime - earlyTime
time_difference_in_days = time_difference / 1.day  # just divide by 1.day

答案 3 :(得分:4)

要考虑DST(夏令时),您必须按日计算。请注意,这假设不到一天被计为1(向上舍入):

num = 0
cur = start_time
while cur < end_time
  num += 1
  cur = cur.advance(:days => 1)
end
return num

答案 4 :(得分:3)

[1] pry(main)> earlyTime = Time.at(123)
=> 1970-01-01 01:02:03 +0100
[2] pry(main)> laterTime = Time.now
=> 2014-04-15 11:13:40 +0200
[3] pry(main)> (laterTime.to_date - earlyTime.to_date).to_i
=> 16175

答案 5 :(得分:2)

这是一个简单的答案,适用于DST:

numDays = ((laterTime - earlyTime)/(24.0*60*60)).round

60 * 60是一小时内的秒数 24.0是一天中的小时数。这是一个漂浮,因为有些日子有点超过24小时,有些则更少。因此,当我们除以一天中的秒数时,我们仍然有一个浮点数,并且舍入将舍入到最接近的整数。

因此,如果我们通过DST,无论哪种方式,我们仍然会绕到最近的一天。即使您处于某个奇怪的时区,DST也会改变一个多小时。

答案 6 :(得分:1)

如果您不想估算并且想要考虑夏令时,这些答案都不会真正起作用。 例如,在时钟下降变化之前的星期三上午10点和之后的星期三上午10点,它们之间的时间将是1周和1小时。在春季,它将是1周减去1小时。 为了获得准确的时间,您可以使用以下代码

Base

答案 7 :(得分:0)

in_days(Rails 6.1 +)

Rails 6.1引入了新的ActiveSupport::Duration转换方法,例如in_secondsin_minutesin_hoursin_daysin_weeksin_months ,和in_years

结果,现在,您的问题可以解决为:

date_1 = Time.parse('2020-10-18 00:00:00 UTC')
date_2 = Time.parse('2020-08-13 03:35:38 UTC') 

(date_2 - date_1).seconds.in_days.to_i.abs
# => 65

这里是a link to the corresponding PR