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选项的解决方案。