読者です 読者をやめる 読者になる 読者になる

Rails Webook

自社のECを開発している会社で働いています。Rails情報やサービスを成長させる方法を書いていきます

Railsで日付/時刻のフォーマットを設定するTips

Rails Tips Rails ActiveSupport

Railsのデフォルトの日付や日時のフォーマットを追加する方法を説明します。
Railsで日付や日時を表示すると、デフォルトでは次のように2014-10-01 09:00:00 +0900のように表示されてしまいます。
f:id:nipe880324:20141206171216p:plain:w420


そのため、strftimeメソッドを使って表示を変えている人もいると思います。

<%= product.published_on.strftime("%Y年%m月%d日 %H時%M分") %>


しかし、このようにすると、各出力で個別にフォーマットを記載しないといけないのでめんどくさく、アプリケーションを通してフォーマットがバラバラになってしまうと可能性があります。
そのため、config/initierlizers/time_formats.rbのような名前でファイルを作成し、フォーマットを一覧にしておいて、アプリから簡単に使えるようにします。


動作確認

  • Rails 4.1

1. フォーマットを作成する

config/initierlizers/time_formats.rbファイルを作成し、カスタムフォーマットを定義します。

# config/initierlizers/time_formats.rb
# 既に定義されているフォーマット
# default => "2014-10-01 09:00:00 +0900"
# long    => "October 01, 2014 09:00"
# short   => "01 Oct 09:00"
# db      => "2014-10-01 00:00:00"

# カスタムフォーマットを定義
Time::DATE_FORMATS[:published_on] = "%Y年%m月%d日 %H時%M分"
Date::DATE_FORMATS[:default]      = "%Y年%m月d日"

2. ビューなどから日時のフォーマットを使う

ビューなどからto_sの引数とシンボルを渡すと、フォーマットされます。

# Viewファイル
<%= product.published_on.to_s(:published_on) %>


サーバーを再起動して確認すると指定したフォーマットで作成されています。
f:id:nipe880324:20141206172156p:plain:w420


3. 日付/日時のフォーマットで使える文字列一覧