在Rails中将日期格式化为文字

9
所以我有一个模型实例,其中包含一个日期时间属性。我使用以下方式在我的视图中显示它:
<%= @instance.date.to_date %> 

但是它显示为:2011-09-09

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

如何实现呢?

谢谢!

5个回答

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

这将给你 "September 9, 2011"。

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

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

这就是我一直在寻找的解决方案。唯一的问题是,我如何将其添加到en.yml文件中?我希望能够在lambda中使用i18n。 - Mooktakim Ahmed

10

有一个更简单的内置方法可以实现您想要的日期样式。

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

to_formatted_s方法默认接受各种格式属性选项。例如,来自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"

你可以在这里看到完整的解释。


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 %>

1
Rails已将其内置于ActiveSupport中作为一个inflector:
ActiveSupport::Inflector.ordinalize(@instance.date.day)

1
你在rails中也有这样的代码 <%= time_tag time %>。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接