DateField

This FormField subclass lets you display an editable date, either in a single text input field, or in three separate fields for day, month and year. It also provides a calendar date picker.

The following example will add a simple DateField to your Page, allowing you to enter a date manually.

mysite/code/Page.php

	<?php

	class Page extends SiteTree {

		private static $db = array(
			'MyDate' => 'Date',
		);
	
		public function getCMSFields() {
			$fields = parent::getCMSFields();
			
			$fields->addFieldToTab(
				'Root.Main',
				DateField::create('MyDate', 'Enter a date')
			);
			
			return $fields;
		} 
	}	

A custom date format for a DateField can be provided through setConfig.

	// will display a date in the following format: 31-06-2012
	DateField::create('MyDate')->setConfig('dateformat', 'dd-MM-yyyy'); 

The formats are based on Zend_Date constants. [/info]

Min and Max Dates

Sets the minimum and maximum allowed date values using the min and max configuration settings (in ISO format or strtotime()).

	DateField::create('MyDate')
		->setConfig('min', '-7 days')
		->setConfig('max', '2012-12-31')
		

The following setting will display your DateField as three input fields for day, month and year separately. HTML5 placeholders 'day', 'month' and 'year' are enabled by default.

	DateField::create('MyDate')
		->setConfig('dmyfields', true)
		->setConfig('dmyseparator', '/') // set the separator
		->setConfig('dmyplaceholders', 'true'); // enable HTML 5 Placeholders

Any custom date format settings will be ignored. [/alert]

Calendar Picker

The following setting will add a Calendar to a single DateField, using the jQuery UI DatePicker widget.

	DateField::create('MyDate')
		->setConfig('showcalendar', true);

following constants should at least be safe:

Constantxxxxx
dnumeric day of the month (without leading zero)
ddnumeric day of the month (with leading zero)
EEEdayname, abbreviated
EEEEdayname
Mnumeric month of the year (without leading zero)
MMnumeric month of the year (with leading zero)
MMMmonthname, abbreviated
MMMMmonthname
yyear (4 digits)
yyyear (2 digits)
yyyyyear (4 digits)

Unfortunately the day- and monthname values in Zend Date do not always match those in the existing jQuery UI locale files, so constants like EEE or MMM, for day and month names could break validation. To fix this we had to slightly alter the jQuery locale files, situated in /framework/thirdparty/jquery-ui/datepicker/i18n/, to match Zend_Date.

At this moment not all locale files may be present. If a locale file is missing, the DatePicker calendar will fallback to 'yyyy-MM-dd' whenever day - and/or monthnames are used. After saving, the correct format will be displayed.

Formatting Hints

It's often not immediate apparent which format a field accepts, and showing the technical format (e.g. HH:mm:ss) is of limited use to the average user. An alternative is to show the current date in the desired format alongside the field description as an example.

	$dateField = DateField::create('MyDate');

	// Show long format as text below the field
	$dateField->setDescription(sprintf(
		_t('FormField.Example', 'e.g. %s', 'Example format'),
		Convert::raw2xml(Zend_Date::now()->toString($dateField->getConfig('dateformat')))
	));

	// Alternatively, set short format as a placeholder in the field
	$dateField->setAttribute('placeholder', $dateField->getConfig('dateformat'));

Fields scaffolded through DataObject::scaffoldCMSFields() automatically have a description attached to them. [/notice]

API Documentation