5. 格式化日期時間
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 s 伺服器。
修改 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) %>