我的视图中有一个var
,从datetime
数据库记录返回日期和时间为UTC格式。输出看起来像这样:2014-01-21 03:13:59 UTC
我该如何格式化?Date.parse(var)
将在IRB中给出#=> Tue, 21 Jan 2014
,但Rails 4 of:" ActiveSupport :: TimeWithzone无隐式转换为字符串"
我最终只想显示日期;格式为:%m/%d/%Y
我唯一的选择不能是:to_s
和regex
这对吗?有人请向我展示铁轨。
使用Date#strftime
:
Date.parse('2014-01-21 03:13:59 UTC').strftime('%m/%d/%Y')
# => "01/21/2014"
如果var
是TimeWithZone
对象,只需调用TimeWithZone#strftime
方法:
var.strftime('%m/%d/%Y')
我会争辩说,rails的方式是在初始化器中命名该格式,并使用to_formatted_s
(或其to_s
别名)使用命名的日期格式:
# in config/initializers/date_time_formats.rb
Time::DATE_FORMATS.merge!(date_us: '%m/%d/%Y')
Date::DATE_FORMATS.merge!(date_us: '%m/%d/%Y')
然后在您的视图中使用此命名格式:
<%= @object.date.to_s(format: :date_us) %>
这使您可以在应用程序中重复使用此命名格式,而无需多次编写复杂的strftime
字符串。您可以添加几种不同的格式,并在应用中有一个位置以更改所有现有格式。
如果您要将应用程序本地化为不同的语言,则可能需要考虑将这些格式存储在yaml文件中。这使您可以根据用户的位置使用不同的格式。在有关I18N的官方铁路指南中阅读有关它的更多信息。