datetime_select より詳細に日付を指定したい

datetime_select は,日付,時間を利用するのに便利な html_helperです.
どのようなオプションが利用できるか,マニュアルを見ても分かりにくいですが,
datetime_selectは,select_day, select_hourなどを順番に呼んでいるだけなので,
selct_* のオプションがそのまま利用できます.

例えば

<%= datetime_select :reserve, :time,
 { :start_year=>Time.now.year,
   :end_year=>Time.now.year+2,
   :use_month_numbers=>true,
   :minute_step=>10}
   %>

とすると,

  • 今年(2007)年から2009年までのみが選択可能 (start_year, end_year)
  • 月の表示が数字(use_month_numbers)
  • 時間の指定は10分毎(minute_step)

となった時刻指定が可能になります.その他オプションは,actionpack/action_view/helpers/date_helper.rb を見るのがはやそう.

もう少し細かく指定したい場合には(例えば,○年○月○日,○時○分と書くとか),datetime_select を利用せず,自分で各時間のフォームを書いてあげる必要があります.

  • 下記は○年○月○日○時○分,で選択する例.
 <%= select_year Time.now, {:prefix=>"reserve", :field_name=>"time(1i)", :start_year=>Time.now.year, :end_year=>Time.now.year+2} %>年
 <%= select_month Time.now, {:prefix=>"reserve", :field_name=>"time(2i)", :use_month_numbers=>true} %>月
 <%= select_day Time.now, {:prefix=>"reserve", :field_name=>"time(3i)" } %>日
 <%= select_hour Time.now, {:prefix=>"reserve", :field_name=>"time(4i)" } %>時
 <%= select_minute Time.now, {:prefix=>"reserve", :field_name=>"time(5i)", :minute_step=>10 } %>分
  • 上記を調べているときに,datetime_separator, time_separatorという時刻を区切る文字を指定できるオプションが,マニュアルには書いてあるのだけど,実際には動かない(ソースにかかれていない)ことが判明.しかし,#7863 で解決済みらしい.http://dev.rubyonrails.org/ticket/7863 :)