Web Forms

Date & time fields

Date picker, time picker, and datetime picker fields for capturing temporal data.


DatePicker

A date input field with a calendar picker.

FormFieldClass.datePicker('birthDate', {
  label: 'Date of Birth',
  required: true,
})

DatePicker-specific options

OptionTypeDefaultDescription
placeholderstringPlaceholder text
defaultValuestring | DateInitial date value

Date format

Dates are stored as ISO 8601 strings (YYYY-MM-DD). The display format follows the user's locale.


DateTimePicker

A combined date and time input field.

FormFieldClass.dateTimePicker('eventStart', {
  label: 'Event Start',
  required: true,
  helpText: 'When does the event begin?',
})

DateTimePicker-specific options

OptionTypeDefaultDescription
placeholderstringPlaceholder text
defaultValuestring | DateInitial datetime value

DateTime format

DateTime values are stored as ISO 8601 strings with timezone information.


TimePicker

A time-only input field.

FormFieldClass.timePicker('openingTime', {
  label: 'Opening Time',
  required: true,
})

TimePicker-specific options

OptionTypeDefaultDescription
placeholderstringPlaceholder text
defaultValuestringInitial time value

Common patterns

Date range

const fields = [
  FormFieldClass.datePicker('startDate', {
    label: 'Start Date',
    required: true,
    wrapperClassName: 'col-span-1',
  }),
  FormFieldClass.datePicker('endDate', {
    label: 'End Date',
    required: true,
    wrapperClassName: 'col-span-1',
    validateWithForm: (value, formValues) => {
      if (
        formValues.startDate &&
        new Date(value) < new Date(formValues.startDate)
      ) {
        return 'End date must be after start date'
      }
      return true
    },
    validationDependencies: ['startDate'],
  }),
]

Event scheduling

const fields = [
  FormFieldClass.text('eventName', {
    label: 'Event Name',
    required: true,
  }),
  FormFieldClass.dateTimePicker('startTime', {
    label: 'Start Time',
    required: true,
  }),
  FormFieldClass.dateTimePicker('endTime', {
    label: 'End Time',
    required: true,
    validateWithForm: (value, formValues) => {
      if (
        formValues.startTime &&
        new Date(value) <= new Date(formValues.startTime)
      ) {
        return 'End time must be after start time'
      }
      return true
    },
    validationDependencies: ['startTime'],
  }),
  FormFieldClass.select('timezone', {
    label: 'Timezone',
    defaultValue: 'America/New_York',
    options: [
      { value: 'America/New_York', label: 'Eastern Time' },
      { value: 'America/Chicago', label: 'Central Time' },
      { value: 'America/Denver', label: 'Mountain Time' },
      { value: 'America/Los_Angeles', label: 'Pacific Time' },
    ],
  }),
]

Business hours

const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

const fields = days.flatMap((day) => [
  FormFieldClass.checkbox(`${day.toLowerCase()}Enabled`, {
    label: day,
    defaultValue: true,
  }),
  FormFieldClass.timePicker(`${day.toLowerCase()}Open`, {
    label: `${day} Open`,
    defaultValue: '09:00',
    showWhen: (values) => values[`${day.toLowerCase()}Enabled`],
    wrapperClassName: 'col-span-1',
  }),
  FormFieldClass.timePicker(`${day.toLowerCase()}Close`, {
    label: `${day} Close`,
    defaultValue: '17:00',
    showWhen: (values) => values[`${day.toLowerCase()}Enabled`],
    wrapperClassName: 'col-span-1',
  }),
])

Conditional date fields

FormFieldClass.datePicker('deadline', {
  label: 'Deadline',
  showWhen: (values) => values.hasDeadline === true,
  requiredWhen: (values) => values.hasDeadline === true,
  validate: (value) => {
    if (new Date(value) < new Date()) {
      return 'Deadline must be in the future'
    }
    return true
  },
})

Transform dates on submit

FormFieldClass.datePicker('birthDate', {
  label: 'Date of Birth',
  submitTransform: (value) => new Date(value).toISOString(),
})
Previous
Boolean fields