Skip to main content
A Date field captures a calendar day. The submitter picks a date, and you control the format of the stored string and any earliest or latest limits.

When to use it

  • Launch dates, send dates, due dates, anything that represents a calendar day.
  • A date that needs a specific stored format, such as YYYYMMDD for use in a code or a URL.
  • A date with business-rule limits, such as no past dates or no more than a year out.
Do not use a Date field when you need a time of day. Date fields store a calendar day only, with no hour or minute.

How a value is produced

When a submission is saved, Terminus Hub stores the date the submitter picked, or the default_value if the field was left blank. The value is built in this order:
  1. Reads the picked date, or resolves the default_value. A relative default such as today or +7d resolves to a concrete date at the moment the submission is saved.
  2. Formats it from the format.components, in their listed order, joined by format.separator.
Validation reads the same date and checks it against min_date and max_date, both of which accept the same absolute or relative expressions as default_value. The order of entries in the components array is the order they appear in the rendered string.

Settings reference

SettingRequiredDefaultDescription
formatYesNoneAn object with components and an optional separator.
format.components[].typeYesNoneOne of day, month, year, week.
format.components[].formatNoNonePer type: day numeric or padded; month numeric, padded, short, or long; year short or full; week numeric, padded, or iso.
format.separatorNoNoneText inserted between components.
default_valueNoNoneAn absolute date or a relative expression.
min_dateNoNoneSame form as default_value. An earlier date fails validation.
max_dateNoNoneSame form as default_value. A later date fails validation.
Relative expressions use the units d (days), m (months), and y (years), for example +7d, -30d, +1m, +1y. The sign is optional, so 5d and +5d mean the same thing. The value today resolves to the current day.

Example

A launch_date field in a Campaign URL Builder model:
name: launch_date
type: date
required: true
settings:
  format:
    components:
      - { type: year, format: full }
      - { type: month, format: padded }
      - { type: day, format: padded }
  default_value: today
  min_date: today
A submitter opening a new submission on 2026-11-15 sees launch_date pre-filled with that day. The stored value formats as 20261115: three zero-padded components with no separator. A submitter trying to save a past date such as 2026-10-01 gets a validation error: Date must be on or after 2026-11-15.

Gotchas

  • Relative defaults resolve when the submission is saved, not when the field was created. A field with default_value: today set last year still gives today’s date to a submission saved today. The same applies to min_date: today.
  • A numeric format sorts; a named-month format does not. The date is stored as the formatted string you see. 20261115 sorts correctly next to 20261116. 15-Nov-2026 does not sort by calendar order. When a date feeds a Concatenation or a column you sort by, prefer zero-padded numeric components.
  • Weeks are not a relative unit. Only d, m, and y work in relative expressions, even though week is a valid component type for formatting. An expression like +2w does not resolve.
  • format is required. You cannot save a Date field with no format. There is no implicit default format.
  • Concatenation field: dates often feed a concatenated value, which is why format choice matters.
  • Text field: another entered field, for values that are not calendar dates.
  • Fields