【发布时间】:2011-10-21 14:41:23
【问题描述】:
所以我有一个具有 datetime 属性的模型实例。我正在使用以下方式在我的视图中显示它:
<%= @instance.date.to_date %>
但它显示为:2011-09-09
我希望它显示为:2011 年 9 月 9 日
我该怎么做?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 datetime date datetime-format
所以我有一个具有 datetime 属性的模型实例。我正在使用以下方式在我的视图中显示它:
<%= @instance.date.to_date %>
但它显示为:2011-09-09
我希望它显示为:2011 年 9 月 9 日
我该怎么做?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 datetime date datetime-format
你也有 在 rails
【讨论】:
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 %>
【讨论】:
Rails 将它作为变形器内置到 ActiveSupport 中:
ActiveSupport::Inflector.ordinalize(@instance.date.day)
【讨论】:
有一种更简单的内置方法可以实现您正在寻找的日期样式。
<%= @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"
你可以看到完整的解释here。
【讨论】:
<%= @instance.date.strftime("%B %d, %Y") %>
这将为您提供“2011 年 9 月 9 日”。
如果您真的需要当天的序数(“th”、“rd”等),您可以这样做:
<%= @instance.date.strftime("%B #{@instance.date.day.ordinalize}, %Y") %>
【讨论】: