- 更新日: 2015年4月3日
- Rails
Rails で時間・時刻表示の独自フォーマットを作成する
Rails の ActiveSupport には超便利なメソッドがたくさん用意されています。時間の操作のためにも便利なメソッドがたくさんありますが、今回は時刻を表示する独自のフォーマットを作成する方法です。
— 環境 —
Rails 4.0.1
Time::DATE_FORMATS ハッシュに追加する
Time::DATE_FORMATS というハッシュに時刻出力用のフォーマットが定義されています。デフォルトで定義されているフォーマット以外にも、このハッシュにオリジナルなフォーマットを追加することができる。フォーマットを追加し、config/initializers で読み込まれるようにします。
config/initializers/00_load_config.rb
1 2 |
Time::DATE_FORMATS[:without_second] = '%Y-%m-%d %H:%M' Time::DATE_FORMATS[:extra_short] = '%Y-%m-%d' |
秒なしと年月日のみのフォーマットを追加しました。公式の rails API ガイドでは、config/initializers/time_formats.rb を作成するように説明してありました。末尾リンク参照。私は、独自定数の定義ファイル(00_load_config.rb)を既に作成済みだったので、それに書いた。
そして、追加したフォーマットのキーを to_formatted_s メソッドに引数で渡します。以下はビューで、@post が作成された日時(created_at)を、独自に定義した :without_second のフォーマット(秒なしフォーマット)で出力する例です。
1 |
<%= @post.created_at.to_formatted_s(:without_second) %> |
1 2 3 |
2014-03-31 12:23 |
このように、年月日時分が出力されます(秒は出力されない)。Rails デフォルトの UTC 時刻で出力されています。
ユーザーがタイムゾーンを持つ場合 in_time_zone して to_formatted_s
I18n を使って国際化してユーザーごとにタイムゾーンを持っている場合は、データベースには時刻を UTC で統一して created_at, updated_at などのカラムに保存しておきます。Rails はデフォルトでは DB への時間保存は UTC になるようです。
そして、出力の際に以下のように in_time_zone メソッドを使います。User モデルの time_zone 属性にユーザーのタイムゾーンが保存されているものとする。
1 |
<%= @post.created_at.in_time_zone(@user.time_zone).to_formatted_s(:without_second) %> |
1 2 3 |
2014-03-31 21:23 |
この例での @user.time_zone は Tokyo です。先ほどの UTC による出力(2014-03-31 12:23)から、ちゃんとプラス9時間になっています。
ちなみにデフォルトで用意されている :db オプションですと、in_time_zone した後にフォーマットしても何故か UTC 時間で出力されるので注意。
1 |
<%= @post.created_at.in_time_zone(@user.time_zone).to_formatted_s(:db) %> |
@user.time_zone が Tokyo であっても、何故か UTC 時刻が出力されるので駄目でした。最初の例のように、独自に定義したフォーマットを使うとOKです。
- – 参考リンク –
- Time
- Rails – 日付/時間フォーマットのデフォルトを設定 – Qiita
- Rails の関連記事
- RailsでMySQLパーティショニングのマイグレーション
- Rails ActiveRecordでdatetime型カラムのGROUP BY集計にタイムゾーンを考慮する
- RailsプラグインGemの作成方法、RSpecテストまで含めたrails pluginの作り方
- RailsでAMPに対応するgemをリリースしました
- Railsでrequest.urlとrequest.original_urlの違い
- Railsでwheneverによるcronバッチ処理
- Google AnalyticsのRails Turbolinks対応
- Railsアプリにソーシャル・シェアボタンを簡単設置
- Rails監視ツール用にErrbitをHerokuで運用
- Facebook APIバージョンのアップグレード手順(Rails OmniAuth)
- 初回公開日: 2014年4月1日
Leave Your Message!