除了“time_ago_in_words”之外,轨道中是否有不同的时间计算?我希望能够在几个小时的时间内使用'h'几个月......前。 3d,或4h,或5m
我的代码现在......
<%= time_ago_in_words(feed_item.created_at) %> ago.
答案 0 :(得分:12)
构成此字符串的组件可以进行本地化,并且是datetime.distance_in_words命名空间
例如棒
en:
datetime:
distance_in_words:
x_minutes:
one: "1m"
other: "%{count}m"
铁路将说10米而不是10分钟。根据需要重复几小时,几天等。您可以在action_view中查看所有键的locales/en.yml。
如果你只想要短格式,你可以创建一个只使用这些键并使用它的伪语言环境
time_ago_in_words created_at, false, :locale => :en_abbrev
答案 1 :(得分:1)
以下是其他一些方法。您可以像正常一样运行方法,然后在字符串上使用gsub。
链接的
string.gsub(/ mi.*/, 'm')
.gsub(/ h.*/, 'h')
.gsub(/ d.*/, 'd')
.gsub(/ mo.*/, 'mo')
.gsub(/ y.*/, 'y')
哈希
string.gsub(/ .+/, {
' minute'=> 'm', ' minutes'=>'m',
' hour' => 'h', ' hours' => 'h',
' day' => 'd', ' days' => 'd',
' month' => 'mo', ' months' => 'mo',
' year' => 'y', ' years' => 'y'
})
块
string.gsub(/ .+/) { |x| x[/mo/] ? 'mo' : x[1] }
除了字符串为"less than a minute"
之外,它们都是相同的。链式解决方案返回"less than a minute"
。哈希解决方案返回"less"
。块解决方案返回"lesst"
。
只需更改此案例的区域设置文件
en:
datetime:
distance_in_words:
less_than_x_minutes:
one: '<1m'
或者在方法顶部添加一个return to子句
def my_method(string)
return '<1m' if string == 'less than a minute'
# code
end
注意:不包含include_seconds: true
选项的解决方案。
答案 2 :(得分:0)
在较新版本的 rails 中,您可以指定一个范围作为方法的选项,如下所示:
time_ago_in_words(company.updated_at, scope: 'datetime.distance_in_words.abbrv')
然后你只需要像这样构造你的常规 i18n 文件:
en:
datetime:
distance_in_words:
abbrv:
about_x_hours:
one: ~ 1h
other: ~ %{count}h
about_x_months:
one: ~ 1mo
other: ~ %{count}mo
about_x_years:
one: ~ 1y
other: ~ %{count}y
almost_x_years:
...
此信息也可在文档中找到: https://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-distance_of_time_in_words