2

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

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之间的小时差?

4

2 回答 2

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
于 2012-09-09T11:41:55.847 回答
3

如果你不需要精确,你可以使用 Rails 的time_ago_in_words助手。

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

当然,根据时差,这也可以返回“分钟”、“天”等。

于 2012-09-09T15:17:19.140 回答