如何减去红宝石的时间?

时间:2017-07-23 15:33:42

标签: ruby-on-rails ruby ruby-on-rails-4

Rails的新手,请耐心等待。我在db中为字段start_time创建了一个:time type列。现在,我必须检查start_time是否比current_time长5小时。

当我在rails控制台中检索 start_time 时,它会给我:(日期永远不会在此时间内更改)

2000-01-01 10:00:00 +0000

当前时间,即 Time.now

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

我无法弄清楚如何做到这一点。我不关心约会,我只需要时差。

3 个答案:

答案 0 :(得分:1)

尝试将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

答案 1 :(得分:0)

c = ((b - a) / 1.hour).round.modulo(24)
if c > 5
  # do something
end
  • a和b作为上面的示例
  • ((b - a)/ 1.hour).round这将导致2个日期之间的小时差异,然后将其舍入以忽略分钟
  • module(24)=将仅输出小时差异
  • 如果1.hour不工作,你可以用c =((b - a)/ 3600)替换它

答案 2 :(得分:0)

可以将时间转换为整数:

a = start_time.to_i
b = Time.zone.now.to_i

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