Ruby on rails 如何在ruby中减去时间?

Ruby on rails 如何在ruby中减去时间?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,对Rails来说是新手,所以请容忍我。我在db中有一个:time type列,用于字段start\u time。现在,我必须检查开始时间是否比当前时间长5小时 当我在rails控制台中检索到开始时间时,会告诉我:(在这个控制台中,日期永远不会改变,只有时间会改变) 和当前时间,即时间。现在 Sun, 23 Jul 2017 20:58:23 IST +05:30 我把这两个值都存储在变量中,就像这样 a = start_time #2000-01-01 10:00:00 +0000 b

对Rails来说是新手,所以请容忍我。我在db中有一个:time type列,用于字段start\u time。现在,我必须检查开始时间是否比当前时间长5小时

当我在rails控制台中检索到开始时间时,会告诉我:(在这个控制台中,日期永远不会改变,只有时间会改变)

和当前时间,即时间。现在

Sun, 23 Jul 2017 20:58:23 IST +05:30
我把这两个值都存储在变量中,就像这样

a = start_time     #2000-01-01 10:00:00 +0000
b = Time.zone.now  #Sun, 23 Jul 2017 20:58:23 IST +05:30
现在,我想要的是如下所示:

if ((a - b) > 5 hours)
  #do something
end

我不知道怎么做。我不在乎日期,我只需要时差。

尝试将UTC时间转换为同一时区:

a = start_time     #2000-01-01 10:00:00 +0000
b = Time.zone.now  #Sun, 23 Jul 2017 20:58:23 IST +05:30
same_time_kind = b.to_date
然后比较:

if ((a - b) > 5.hours)
  #do something
end
  • a和b作为上述样品
  • ((b-a)/1.hour)。四舍五入将导致两个日期之间的小时差,然后四舍五入忽略分钟
  • 模块(24)=将仅输出小时差
  • 如果1小时不工作,你可以用c=((b-a)/3600)代替

    • 可以将时间转换为整数:

      a = start_time.to_i
      b = Time.zone.now.to_i
      
      if ((a - b) > 5.hours.to_i)
        #do something
      end
      

      它不工作,因为根据你的方法,我只得到日期,正如我在问题中提到的。我不在乎日期。我只需要时间的差别。因为开始时间和当前时间的日期不同,所以会产生问题
      c = ((b - a) / 1.hour).round.modulo(24)
      if c > 5
        # do something
      end
      
      a = start_time.to_i
      b = Time.zone.now.to_i
      
      if ((a - b) > 5.hours.to_i)
        #do something
      end