Date input

A date input field allows the user to enter a date they remember.

Examples

Default

Example date field (optional)
<form action="/" accept-charset="UTF-8" method="post">
  <div class="cads-form-field">
    <div class="cads-form-field__content">
      <fieldset class="cads-form-group"><legend class="cads-form-field__label">Example date field <span class="cads-form-field__optional">(optional)</span></legend>
        <div class="cads-date-input">
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field-input">Day</label><input class="cads-input cads-input--2ch" name="forms_date_field[date_field(3i)]" id="forms_date_field_date_field-input" inputmode="numeric"></div>
          </div>
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_2i">Month</label><input class="cads-input cads-input--2ch" name="forms_date_field[date_field(2i)]" id="forms_date_field_date_field_2i" inputmode="numeric"></div>
          </div>
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_1i">Year</label><input class="cads-input cads-input--4ch" name="forms_date_field[date_field(1i)]" id="forms_date_field_date_field_1i" inputmode="numeric"></div>
          </div>
        </div>
      </fieldset>
    </div>
  </div>
</form>

<%= form_with model: Forms::DateField.new, url: "/" do |form| %>
  <%= form.cads_date_field(:date_field) %>
<% end %>

With hint

Example date field with hint (optional)

Enter your date of birth, like 01 02 1990

<form action="/" accept-charset="UTF-8" method="post">
  <div class="cads-form-field">
    <div class="cads-form-field__content">
      <fieldset class="cads-form-group" aria-describedby="forms_date_field_date_field_hint-hint"><legend class="cads-form-field__label">Example date field with hint <span class="cads-form-field__optional">(optional)</span></legend>
        <p class="cads-form-field__hint" id="forms_date_field_date_field_hint-hint">Enter your date of birth, like 01 02 1990</p>
        <div class="cads-date-input">
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_hint-input">Day</label><input class="cads-input cads-input--2ch" name="forms_date_field[date_field_hint(3i)]" id="forms_date_field_date_field_hint-input" inputmode="numeric"></div>
          </div>
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_hint_2i">Month</label><input class="cads-input cads-input--2ch" name="forms_date_field[date_field_hint(2i)]" id="forms_date_field_date_field_hint_2i" inputmode="numeric"></div>
          </div>
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_hint_1i">Year</label><input class="cads-input cads-input--4ch" name="forms_date_field[date_field_hint(1i)]" id="forms_date_field_date_field_hint_1i" inputmode="numeric"></div>
          </div>
        </div>
      </fieldset>
    </div>
  </div>
</form>

<%= form_with model: Forms::DateField.new, url: "/" do |form| %>
  <%= form.cads_date_field(:date_field_hint, hint: "Enter your date of birth, like 01 02 1990") %>
<% end %>

With error message

Example date field (optional)

Date must be in the past

<form action="/" accept-charset="UTF-8" method="post">
  <div class="cads-form-field cads-form-field--has-error">
    <div class="cads-form-field__error-marker"></div>
    <div class="cads-form-field__content">
      <fieldset class="cads-form-group" aria-describedby="forms_date_field_date_field_required-error"><legend class="cads-form-field__label">Example date field <span class="cads-form-field__optional">(optional)</span></legend>
        <p class="cads-form-field__error-message" id="forms_date_field_date_field_required-error">Date must be in the past</p>
        <div class="cads-date-input">
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_required-input">Day</label><input class="cads-input cads-input--2ch cads-input--error" name="forms_date_field[date_field_required(3i)]" id="forms_date_field_date_field_required-input" inputmode="numeric" value="18"></div>
          </div>
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_required_2i">Month</label><input class="cads-input cads-input--2ch cads-input--error" name="forms_date_field[date_field_required(2i)]" id="forms_date_field_date_field_required_2i" inputmode="numeric" value="3"></div>
          </div>
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_required_1i">Year</label><input class="cads-input cads-input--4ch cads-input--error" name="forms_date_field[date_field_required(1i)]" id="forms_date_field_date_field_required_1i" inputmode="numeric" value="2026"></div>
          </div>
        </div>
      </fieldset>
    </div>
  </div>
</form>

<%= form_with model: Forms::DateField.invalid_example, url: "/" do |form| %>
  <%= form.cads_date_field(:date_field_required) %>
<% end %>

Page heading

Example date field with page heading

<form action="/" accept-charset="UTF-8" method="post">
  <div class="cads-form-field">
    <div class="cads-form-field__content">
      <fieldset class="cads-form-group"><legend class="cads-form-field__label">
          <h1 class="cads-page-title">Example date field with page heading</h1>
        </legend>
        <div class="cads-date-input">
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_page_heading-input">Day</label><input class="cads-input cads-input--2ch" name="forms_date_field[date_field_page_heading(3i)]" id="forms_date_field_date_field_page_heading-input" inputmode="numeric"></div>
          </div>
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_page_heading_2i">Month</label><input class="cads-input cads-input--2ch" name="forms_date_field[date_field_page_heading(2i)]" id="forms_date_field_date_field_page_heading_2i" inputmode="numeric"></div>
          </div>
          <div class="cads-date-input">
            <div class="cads-date-input__item"><label class="cads-form-field__label" for="forms_date_field_date_field_page_heading_1i">Year</label><input class="cads-input cads-input--4ch" name="forms_date_field[date_field_page_heading(1i)]" id="forms_date_field_date_field_page_heading_1i" inputmode="numeric"></div>
          </div>
        </div>
      </fieldset>
    </div>
  </div>
</form>

<%= form_with model: Forms::DateField.new, url: "/" do |form| %>
  <%= form.cads_date_field(:date_field_page_heading, page_heading: true) %>
<% end %>

Using with Rails

When using with Rails we recommend using the form builder method provided by CitizensAdviceComponents::FormBuilder.

<%= form_with model: @model, url: "/" do |form| %>
  <%= form.cads_date_field(
    :date_of_birth,
    hint: "Example hint text",
    required: true
  ) %>
<% end %>

The method accepts an options hash with the following optional parameters:

  • :label - The text for the label associated with the input. Defaults to using translations.
  • :hint - Hint text for the input
  • :required - Boolean indicating the field is optional (i.e. not required)
  • :page_heading - Wraps the <legend> in a <h1>

View component version

We also provide an older view component version of the component

<%= render CitizensAdviceComponents::DateInput.new(name: "dob", label: "Date of birth") %>
Component arguments
Argument Description
Argument name Description Required, field name
Argument label Description Required, the text for the label associated with the input
Argument errors Description Optional, an array of which fields should be hightlighted when an error message appears. Options are day, month and year.
Argument values Description Optional, placeholder values
Argument options Description Optional, a hash with one or more of the following values:
Argument options[:page_heading] Description → Optional, boolean indicating the field label is a page heading
Argument options[:hint] Description → Optional, hint text for the input
Argument options[:error_message] Description → Optional, an error message for the input
Argument options[:optional] Description → Optional, boolean indicating the field is optional (ie not required)