如何确定Ruby中两个时间实例之间的天数?
> earlyTime = Time.at(123)
> laterTime = Time.now
> time_difference = laterTime - earlyTime
我想确定time_difference
中的天数(我不担心几天的时间。上下调整很好)。
答案 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)
Rails 6.1引入了新的ActiveSupport::Duration转换方法,例如in_seconds,in_minutes,in_hours,in_days,in_weeks,in_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