Rails计算时差

时间:2012-09-09 11:35:24

标签: ruby-on-rails ruby

我已尝试过这样的代码,但它不起作用:

require 'time_diff'

cur_time = Time.now.strftime('%Y-%m-%d %H:%M')
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time))
if  @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && time_diff_components[:hour] < 3 &&

但timediff为0,db时间如下所示:

  

2012-08-28 19:53:12

如何计算现在和db之间的小时差异?

2 个答案:

答案 0 :(得分:4)

首先,你应该看看这两行:

cur_time = Time.now.strftime('%Y-%m-%d %H:%M')
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time))

为什么格式化时间然后只使用该值作为解析操作的输入?当然,写起来会更简单 - 而且不那么脆弱:

time_diff_components = Time.diff(@art.datetime_of_update, Time.now)

我不知道为什么Time.diff不适合你(我不是Ruby开发者),但如果目的是检查文章是否在“不到3小时前”更新,那么有一个更简单的方法:从当前时间减去三个小时,并将文章的更新时间与该限制进行比较:

limit_time = Time.now + 3.hours
if @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && @art.datetime_of_update >= limit_time

答案 1 :(得分:3)

如果你不必精确,你可以使用Rails&#39; time_ago_in_words帮助者。

time_ago_in_words(Time.now - 3.hours)
#=> about 3 hours

当然,根据时差,这可以返回&#39;分钟&#39;天&#39;等等。