我需要将time_ago_in_words的结果显示为“几天前”

时间:2013-05-09 16:14:20

标签: ruby ruby-on-rails-3

当我将Rails time_ago_in_words方法传递给大于1个月前的日期时,它会返回一个字符串,其内容类似于“约N个月”。

无论如何有这种方法只能在几天之内返回日期参数的距离,即30天前,50天前,90天前等...

3 个答案:

答案 0 :(得分:4)

您可以在time_ago_in_words

之上定义自己的帮助程序
def days_ago_in_words(time)
  days = ((Time.now - time.to_time) / 86400.0).round
  if days > 1
    I18n.t :x_days, :count => days, :scope => :'datetime.distance_in_words'
  else
    time_ago_in_words(time)
  end
end

I18n键和范围来自distance_of_time_in_words,因此您无需定义自己的键。

答案 1 :(得分:3)

class Time
  def days_ago
    diff = Time.now - self
    return ago if diff < 86400
    "#{"day".pluralize(diff.to_i / 86400)} ago"
  end
end

class Date
  def days_ago
    to_time.days_ago
  end
end

或作为帮助者:

def days_ago(date)
  diff = Time.now - date.to_time
  return date.ago if diff < 86400
  "#{"day".pluralize(diff.to_i / 86400)} ago"
end

答案 2 :(得分:1)

不,你不能。帮助者不支持它,这里是definition

但是,您的情况实际上比辅助逻辑更简单。您可以创建一个新的帮助程序,从当前日期中减去旧日期,然后将得到的秒数除以(60 * 60 * 24),这是一天中的秒数,您就可以得到结果。