将日期格式化为Rails中的单词

时间:2011-08-06 22:21:57

标签: ruby-on-rails ruby-on-rails-3 datetime date datetime-format

所以我有一个具有datetime属性的模型实例。我在我的视图中使用以下方式显示它:

<%= @instance.date.to_date %> 

但显示为:2011-09-09

我希望它显示为:2011年9月9日

我该怎么做?

谢谢!

5 个答案:

答案 0 :(得分:13)

<%= @instance.date.strftime("%B %d, %Y") %>

这会给你“2011年9月9日”。

如果你真的需要当天的序数(“th”,“rd”等),你可以这样做:

<%= @instance.date.strftime("%B #{@instance.date.day.ordinalize}, %Y") %>

答案 1 :(得分:10)

有一种更简单的内置方法可以实现您正在寻找的日期样式。

<%= @instance.datetime.to_date.to_formatted_s :long_ordinal %>

默认情况下,to_formatted_s方法接受各种格式属性选项。对于eaxmple,来自Rails API:

date.to_formatted_s(:db)            # => "2007-11-10"
date.to_s(:db)                      # => "2007-11-10"

date.to_formatted_s(:short)         # => "10 Nov"
date.to_formatted_s(:long)          # => "November 10, 2007"
date.to_formatted_s(:long_ordinal)  # => "November 10th, 2007"
date.to_formatted_s(:rfc822)        # => "10 Nov 2007"

您可以看到完整的解释here

答案 2 :(得分:7)

Rails执行此操作的方法是使用

<%=l @instance.date %>

“l”是“localize”的缩写,并使用您在en.yml中定义的格式将日期转换为可读格式。您可以在yml文件中定义各种格式:

en:
  date:
    formats:
      default: ! '%d.%m.%Y'
      long: ! '%a, %e. %B %Y'
      short: ! '%e. %b'

要使用视图中默认格式以外的其他格式,请使用:

<%=l @instance.date, format: :short %>

答案 3 :(得分:1)

Rails将它作为变形器内置到ActiveSupport中:

ActiveSupport::Inflector.ordinalize(@instance.date.day)

答案 4 :(得分:1)

You also have <%= time_tag time %> in rails