Rails: 日時フィールドで令和を表示

外観

目的
datetime_selectで令和を表示します。今回は元号をハードコードしました。

環境
macOS 10.15.5
Ruby 2.7.1
Rails 6.0.3.2
Yarn 1.22.4
Node 14.0.0

参照
ActionView--Helpers
Railsタイムゾーンまとめ - Qiita

リポジトリ
https://github.com/usutani/try_datetime_select_reiwa

画面

画像1

開始日時のdatetime_selectに令和で年を表示しました。上記の図では比較のために下側のdatetime_selectは、scaffoldで生成したままの状態です。

画像2

メニューの開始年は今年に設定しました。
終了年はデフォルトの今年+5年です。

手順

rails new -TM --skip-active-storage try_datetime_select_reiwa
cd try_datetime_select_reiwa

bin/rails g scaffold Event name start_at:datetime end_at:datetime
bin/rails db:migrate

bin/rails s
open http://localhost:3000/events/new

config/application.rb

module TryDatetimeSelectReiwa
  class Application < Rails::Application
    # ...
    config.time_zone = 'Tokyo'
    config.active_record.default_timezone = :local
  end
end

app/views/events/_form.html.erb

  <div class="field">
    <%= form.label :start_at, '開始日時' %>
    <%= render 'reiwa_datetime_select', form: form, datetime_at: :start_at %>
  </div>

  <div class="field">
    <%= form.label :end_at, '終了日時' %>
    <%= render 'reiwa_datetime_select', form: form, datetime_at: :end_at %>
  </div>

app/views/events/_reiwa_datetime_select.erb

<%= form.datetime_select(datetime_at,
                         start_year: Time.zone.now.year,
                         year_format: ->(year) { "令和 #{year - 2018} 年" },
                         month_format_string: "%<number>d 月",
                         datetime_separator: '日 ',
                         time_separator: '時')%>
<span>分</span>

以上です。

この記事が気に入ったらサポートをしてみませんか?