【Rails 应用实战】5. 格式化日期时间

107 阅读1分钟

5-1 strftime 格式化时间

在修改预设时区后,Rails 预设的时间显示格式例如 2017-04-10 17:53:55 +0800 包含了时区资讯,通常我们不会显示给用户,那要如何修改时间的显示方式呢?

Ruby 内建了strftime这个方法来格式化输出,请修改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 代表分钟。

5-2 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')

这样就会1. 修改预设的时间显示格式2. 注册一个新的格式是 ymd 只有日期

重启 rails 服务器。