date Field Type¶
A field that allows the user to modify date information via a variety of different HTML elements.
The underlying data used for this field type can be a DateTime
object,
a string, a timestamp or an array. As long as the input option is set
correctly, the field will take care of all of the details.
The field can be rendered as a single text box, three text boxes (month, day, and year) or three select boxes (see the widget_ option).
Underlying Data Type | can be DateTime , string, timestamp, or array (see the input option) |
Rendered as | single text box or three select fields |
Options | |
Parent type | field (if text), form otherwise |
Class | Symfony\Component\Form\Extension\Core\Type\DateType |
Basic Usage¶
This field type is highly configurable, but easy to use. The most important
options are input
and widget
.
Suppose that you have a publishedAt
field whose underlying date is a
DateTime
object. The following configures the date
type for that
field as three different choice fields:
$builder->add('publishedAt', 'date', array(
'input' => 'datetime',
'widget' => 'choice',
));
The input
option must be changed to match the type of the underlying
date data. For example, if the publishedAt
field’s data were a unix timestamp,
you’d need to set input
to timestamp
:
$builder->add('publishedAt', 'date', array(
'input' => 'timestamp',
'widget' => 'choice',
));
The field also supports an array
and string
as valid input
option
values.
Field Options¶
widget¶
type: string
default: choice
The basic way in which this field should be rendered. Can be one of the following:
input¶
type: string
default: datetime
The format of the input data - i.e. the format that the date is stored on your underlying object. Valid values are:
string
(e.g.2011-06-05
)datetime
(aDateTime
object)array
(e.g.array('year' => 2011, 'month' => 06, 'day' => 05)
)timestamp
(e.g.1307232000
)
The value that comes back from the form will also be normalized back into this format.
empty_value¶
type: string
or array
If your widget option is set to choice
, then this field will be represented
as a series of select
boxes. The empty_value
option can be used to
add a “blank” entry to the top of each select box:
$builder->add('dueDate', 'date', array(
'empty_value' => '',
));
Alternatively, you can specify a string to be displayed for the “blank” value:
$builder->add('dueDate', 'date', array(
'empty_value' => array('year' => 'Year', 'month' => 'Month', 'day' => 'Day')
));
years¶
type: array
default: five years before to five years after the current year
List of years available to the year field type. This option is only relevant
when the widget
option is set to choice
.
months¶
type: array
default: 1 to 12
List of months available to the month field type. This option is only relevant
when the widget
option is set to choice
.
days¶
type: array
default: 1 to 31
List of days available to the day field type. This option is only relevant
when the widget
option is set to choice
:
'days' => range(1,31)
format¶
type: integer
or string
default: IntlDateFormatter::MEDIUM
Option passed to the IntlDateFormatter
class, used to transform user input
into the proper format. This is critical when the widget option is
set to single_text
, and will define how the user will input the data.
By default, the format is determined based on the current user locale; you
can override it by passing the format as a string.
For more information on valid formats, see Date/Time Format Syntax. For
example, to render a single text box that expects the user to end yyyy-MM-dd
,
use the following options:
$builder->add('date_created', 'date', array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
));
pattern¶
type: string
This option is only relevant when the widget is set to choice
.
The default pattern is based off the format option, and tries to
match the characters M
, d
, and y
in the format pattern. If
no match is found, the default is the string {{ year }}-{{ month }}-{{ day }}
.
Tokens for this option include:
{{ year }}
: Replaced with theyear
widget{{ month }}
: Replaced with themonth
widget{{ day }}
: Replaced with theday
widget
data_timezone¶
type: string
default: system default timezone
Timezone that the input data is stored in. This must be one of the PHP supported timezones
user_timezone¶
type: string
default: system default timezone
Timezone for how the data should be shown to the user (and therefore also the data that the user submits). This must be one of the PHP supported timezones