Link Search Menu Expand Document

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

image

這個 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) %>


Copyright © 2010-2022 Wen-Tien Chang All Rights Reserved.