我已尝试过这样的代码,但它不起作用:
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之间的小时差异?
答案 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;等等。