datetime_select(object_name, method, options = {}, html_options = {}) public

Returns a set of select tags (one for year, month, day, hour, and minute) pre-selected for accessing a specified datetime-based attribute (identified by method) on an object assigned to the template (identified by object). Examples:

If anything is passed in the html_options hash it will be applied to every select tag in the set.

Examples

  # Generates a datetime select that, when POSTed, will be stored in the post variable in the written_on
  # attribute
  datetime_select("post", "written_on")

  # Generates a datetime select with a year select that starts at 1995 that, when POSTed, will be stored in the
  # post variable in the written_on attribute.
  datetime_select("post", "written_on", :start_year => 1995)

  # Generates a datetime select with a default value of 3 days from the current time that, when POSTed, will
  # be stored in the trip variable in the departing attribute.
  datetime_select("trip", "departing", :default => 3.days.from_now)

  # Generates a datetime select that discards the type that, when POSTed, will be stored in the post variable
  # as the written_on attribute.
  datetime_select("post", "written_on", :discard_type => true)

  # Generates a datetime select with a custom prompt. Use :prompt=>true for generic prompts.
  datetime_select("post", "written_on", :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
  datetime_select("post", "written_on", :prompt => {:hour => true}) # generic prompt for hours
  datetime_select("post", "written_on", :prompt => true) # generic prompts for all

The selects are prepared for multi-parameter assignment to an Active Record object.

Show source
Register or log in to add new notes.
January 14, 2009
2 thanks

See #data_select for available options

Available symbols for “options” hash are described on date_select page

August 3, 2009
0 thanks

Separating date and time

Option :datetime_separator can be set too. Default is ‘ — ’

September 2, 2010
0 thanks

Set hour and/or minutes

To set the hour and/or the minutes, you can use:

<%= f.datetime_select(:offer_end, :default => { :hour => 23, :minute => 59 }) %>
December 2, 2011 - (>= v3.0.0)
0 thanks

Difference in DateTimes ...

Mostly, the database date columns are DateTime instances. Whereas Rails adds several useful utility functions to DateTime (in activesupport), there is some confusing behavior. This is at least somewhat surprising.

Two subtract two DateTime instances, you should always “round” the returned value. Suppose:

d1 = DateTime.now d2 = d1 - 5.days.ago

then, d1 - d2 is a Rational, which tells you the difference between dates only after rounding. Thus, diff_in_days = (d1 - d2).round