<%= @account.created_at.to_s(:db) %>
使用to_s(:db) 时间会出现日期加上时间,否则就会出现原始的UTC
Rails 时间 to_s 方法
在一个 Rails 项目中,会有很多地方会显示时间,我们希望采用一致的方式输出。
除了
strftime
方法,Rails 也可以直接呼叫to_s
来转换输出格式,例如datetime = Time.now datetime.to_s(:db) # => "2007-12-04 00:00:00" datetime.to_s(:number) # => "20071204000000" datetime.to_s(:short) # => "04 Dec 00:00" datetime.to_s(:long) # => "December 04, 2007 00:00" datetime.to_s(:long_ordinal) # => "December 4th, 2007 00:00" datetime.to_s(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000" datetime.to_s(:iso8601) # => "2007-12-04T00:00:00+00:00"另外,也可以自行配置项目常用的格式。例如,请编辑
config/application.rb
,在最后新增一行:Time::DATE_FORMATS.merge!(:default => '%Y/%m/%d %I:%M %p', :ymd => '%Y/%m/%d')这样就会
- 修改默认的时间显示格式
- 注册一个新的格式是
ymd
只有日期重启
rails s
服务器。修改
app/views/events/index.html.erb
app/views/events/index.html.erb - <%= event.created_at.strftime("%Y/%m/%d %I:%M %p") %> + <%= event.created_at.to_s %>就会得到一样的结果
2017/04/10 05:53 PM
了。如果只想显示日期,可以改成
<%= event.created_at.to_s(:ymd) %>
strftime 格式化时间
在修改默认时区后,Rails 默认的时间显示格式例如
2017-04-10 17:53:55 +0800
包含了时区资讯,通常我们不会显示给用户,那要如何修改时间的显示方式呢?Ruby 内建了 strftime 这个方法来格式化输出,请修改
app/views/events/index.html.erb
app/views/events/index.html.erb - <%= event.created_at %> + <%= event.created_at.strftime("%Y/%m/%d %I:%M %p") %>这样就会输出成例如
2017/04/10 05:53 PM
了
这个 strftime 方法接受了一个字符串参数是格式。详细这个格式代表什么意义,请参考 strftime 文档上的说明,例如%m
就代表月份(会补零),而%M
代表分钟