3

我有一个以分钟为单位的值列表,我想轻松地将其转换为最接近的匹配项,如下所示

10 => 10 minutes
1440 => 1 day
86400 => 2 months
525600 => 1 year

在 Rails 中是否有任何简单的方法可以做到这一点?

4

4 回答 4

8

试试distance_of_time_in_words。它直接对两个Time对象进行操作,计算差异,但你总是可以这样做:

include ActionView::Helpers::DateHelper

def minutes_in_words(minutes)
  distance_of_time_in_words(Time.at(0), Time.at(minutes * 60))
end

minutes_in_words(10)
=> "10 minutes"
minutes_in_words(1440)
=> "1 day"
minutes_in_words(86400)
=> "2 months"
minutes_in_words(525600)
=> "about 1 year"
于 2012-12-20T22:05:34.700 回答
3

我可能会使用time_ago_in_words一些数学来获得正确的操作日期......

http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-time_ago_in_words

time_ago_in_words(3.minutes.from_now)       # => 3 minutes
time_ago_in_words(Time.now - 15.hours)      # => about 15 hours
time_ago_in_words(Time.now)                 # => less than a minute

它不是(故意)精确的,但它已经存在了。否则,使用一些除法/模数数学很容易自己动手......

于 2012-12-20T22:05:48.950 回答
2

不要认为 RoR 有这个,但这很容易

def to_days(minutes)
  minutes / (60*24)
end

def to_months(minutes)
  minutes / (60*24*30)
end

def to_years(minutes)
  minutes / (60*24*365)
end
于 2012-12-20T22:06:01.210 回答
0

看看下面的链接,我想它有你需要的。查看函数 distance_of_time_in_words。

http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html

于 2012-12-20T22:14:26.680 回答