LoginSignup
10
13

More than 5 years have passed since last update.

[rails]date_field_tagで入力した日付をdate型に変換して特定フォーマットで表示する方法

Last updated at Posted at 2017-05-07

やりたいこと

date_field_tagで入力された日付を特定フォーマット(yyyy年mm月dd日(r曜日))に変換したい。
具体的にはViewからある文字を入力させて、値をMailerに渡して、メールを送りたい。

Rails ver: 4.2.6
Ruby ver: 2.3.1

やり方

View部分

モデルに紐付かない形にしたかったので、date_field_tagで指定。 初期値はなし(nil)

= date_field_tag 'date', nil

controller部分

params[:date]は、string型であり、フォーマットはyyyy-mm-ddになっている。

date = params[:date]

そして、値をdate型に変換する際は

date.to_date

のようにする。

その他にも、

date.in_time_zone
date.to_time
date_datetime


等が使え、様々な型に変換できる。

[参考リンク]
http://qiita.com/aono/items/3d348fb5bd7f85a3a6ed

表示フォーマット変換

フォーマット変換はいくつかやり方がありますが、railsの場合、i18nを使うのが良いかなと思っています。
一度定義すれば流用しやすく、管理もしやすいです。

1.フォーマットの登録

localesファイルに登録します。
ファイルを作ってもいいですが、ここから持ってきて自分で変更してもOK
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml

以下のようにすることで、言語が日本語で、date型の場合の表示を方法を定義できます。
なお、time型の場合は、time: という項目を作ってあげる必要があります。

config/locales/ja.yml
ja:
  date:
    abbr_day_names:
    - 
    - 
    - 
    - 
    - 
    - 
    - 
    formats:
      default: "%Y/%m/%d"
      short: "%m/%d"
      long: "%Y年%m月%d日(%a)"

併せて、application.rbのlocale設定を変更

application.rb
config.i18n.default_locale = :ja

2.使ってみる

以下のように使います。

I18n.l('時刻の指定', format: '使うフォーマットの指定')


I18n.l(date.to_date, format: :long)

なお、viewであれば、ヘルパーメソッドが使えるのでもっと簡潔に書けます。
l date.to_date, format: :long

参考リンク

Railsで文字列から日時をパースしたい
http://qiita.com/aono/items/3d348fb5bd7f85a3a6ed

【Rails】曜日フォーマット
http://qiita.com/onody/items/ad84fdd6c4b2013affdf

RubyとRailsにおけるTime, Date, DateTime, TimeWithZoneの違い
http://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c

10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13