Rails:格式化日期:今天"HH:MM",昨天"Yesterday","Weekday"上周其他日子,"DD.MM."其他所有日期



我确信已经有了我需要的解决方案,但我想我不知道该搜索什么。有指向正确方向的指示吗?

我正在考虑类似Rails的distance_of_time_in_words_to_now

谢谢。

我相信您可以使用这样的助手。

def custom_format(date)
if date == Date.today
"Today"
elsif date == Date.yesterday
"Yesterday"
elsif (date > Date.today - 7) && (date < Date.yesterday)
date.strftime("%A")
else
date.strftime("%B %-d")
end
end

没有测试代码,它只是指向您的问题的指针。

创建一个文件/config/initializers/time_format.rb并将此代码放入其中:

Time::DATE_FORMATS[:humanized_ago]  = ->(time) do
st = Time.now.beginning_of_day
nd = Time.now.end_of_day
case 
when time.between?(st + 1.day, nd + 1.day)
"Tomorrow #{time.strftime('%H:%M')}"
when time.between?(st, nd)
"Today #{time.strftime('%H:%M')}"
when time.between?(st - 1.day, nd - 1.day)
"Yesterday #{time.strftime('%H:%M')}"
when time.between?(st - 6.day, nd - 2.day)
time.strftime('%a %H:%M')
else 
time.strftime('%y-%b-%d %H:%M')
end
end

在Rails Time对象上,调用函数time.to_s(:humanized_ago)。如果你不喜欢符号":humanized_ago",可以在time_format.rb的第一行中随意更改。如果你想要其他格式,你可以找到它。

我这样写比较是有原因的。我找不到使用Ruby内置范围来测试时间的方法,您需要能够测试不包括终点的时间间隔。

试试这个

<%= time_ago_in_words(time) %> ago

相关内容

最新更新