datetime_select
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).
If anything is passed in the html_options hash it will be applied to every select tag in the set.
# Generates a datetime select that, when POSTed, will be stored in the article variable in the written_on # attribute. datetime_select("article", "written_on") # Generates a datetime select with a year select that starts at 1995 that, when POSTed, will be stored in the # article variable in the written_on attribute. datetime_select("article", "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) # Generate a datetime select with hours in the AM/PM format datetime_select("article", "written_on", ampm: true) # Generates a datetime select that discards the type that, when POSTed, will be stored in the article variable # as the written_on attribute. datetime_select("article", "written_on", discard_type: true) # Generates a datetime select with a custom prompt. Use <tt>prompt: true</tt> for generic prompts. datetime_select("article", "written_on", prompt: { day: 'Choose day', month: 'Choose month', year: 'Choose year' }) datetime_select("article", "written_on", prompt: { hour: true }) # generic prompt for hours datetime_select("article", "written_on", prompt: true) # generic prompts for all
The selects are prepared for multi-parameter assignment to an Active Record object.
See #data_select for available options
Available symbols for “options” hash are described on date_select page
Separating date and time
Option :datetime_separator can be set too. Default is ‘ — ’
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 }) %>
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