Last updated March 8, 2012. Created on February 25, 2012.
Edited by joachim, arlinsandbulte. Log in to edit this page.

Date Fields

The Date field uses the Date API to create date fields and widgets.

You have a choice of creating an ISO date or a unix timestamp. If you are porting information from another application you may want to create a field using a type that matches the source data. Some advantages and disadvantages of each include:

Date
  • Called a 'datetime' field type in techno database speak. This format type is recomended for most installs because it takes advantage of the database's date handling functions without any conversion, which means faster queries.
  • Stores the date in the database's native date format (YYYY-MM-DD HH:MM:SS).
  • The data is in a human-readable form.
  • You can use it for incomplete dates, i.e. only a year or only a year and a month, and pad the other values with zeros, so it does not appear to be any more precise than it really is.
Date (ISO Format)
  • Stores the date in an ISO format (YYYY-MM-DDTHH:MM:SS).
  • The data is in a human-readable form.
  • You can use it for incomplete dates, i.e. only a year or only a year and a month, and pad the other values with zeros, so it does not appear to be any more precise than it really is.
  • It is a format that is internationally-recognized, and it is used as-is on many web sites and in many applications.
Date (Unix Timestamp)
  • Stores the date as an integer.
  • Takes up less room in the database because it's smaller.
  • Often easier to use for date calculations because you can increase or decrease it just by adding or subtracting seconds.
  • It is the format used by php date functions.
  • It must be filled with a complete date -- year, month, day, hour, minute, second, so you sometimes have to arbitrarily set some of these values even if they are not applicable.

Date Widgets

There are several widgets to choose from to control how users can enter data for this field.

Text Field
The Text Field date widget uses a custom format set in the field settings, like '31.12.2008'. As a fallback the widget will try to accept input allowed by the php strtotime function. This allows the user to type a date in in many natural formats, like 'March 31, 1980'.
There are limitations to strtotime, so setting a custom format is more reliable. The strtotime function will assume date shortcuts are in American format (MM/DD/YY), and strtotime will not work for dates prior to 1970.
Select List
The Select List date widget presents users with a drop-down list or textfield for each part of the date (year, month, day, hour, etc.). The whole selector is collapsed onto a single line using css (except for the timezone selector, if date-specific timezones are collected). The selector is highly configurable and you can set it up to use 5, 10, or 15 minute increments for minutes and seconds, or make some parts of the selector use textfields instead of drop-downs, useful to allow any year without creating a huge drop-down selector.
Pop-up Calendar
The Javascript Pop-up Calendar is offered as an input alternative if the Date Popup module is installed. The date is split into date and time fields, and the date field uses a jQuery popup calendar and the time field uses a jQuery timeselector widget that only allows valid time input.

Looking for support? Visit the Drupal.org forums, or join #drupal-support in IRC.

Comments

Vacilando’s picture

The phrase "you can use it for incomplete dates" is misleading; see this issue.


Tomáš J. Fülöpp @vacilandois

kaizerking’s picture

How to change the label "To" to something else

aangel’s picture

It should be noted that it's possible to select a timezone only for the Date and Timestamp types — but not for the Date (ISO Format). The date object stores the timezone but it's not surfaced with the UI. Seems odd but that's how 7.x-2.8 works.

André Angelantoni
Founder, PerformantLabs.com

sqrt’s picture

Beware when using a timestamp, i.e. using the datestamp field type, you won't be able to save any date. Dates which are below the year 1902 or above the year 2037 usually can't be saved by the defined integer stamp.