Rails更短“time_ago_in_words”
除了“time_ago_in_words”之外,轨道中是否有不同的时间计算? 我希望能够在几个小时的时间内使用’h’几个月……前。 3d,或4h,或5m
我的代码现在……
ago.
组成此字符串的组件可以进行本地化,并且是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
这是其他一些方法。 你像正常一样运行方法,然后在字符串上使用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
选项的解决方案。