Portal Community

Minimal Example

{
  "id": "start-date",
  "type": "date",
  "label": "Start Date",
  "required": true,
  "width": "half",
  "binding": {
    "source": "$json",
    "path": "project.startDate"
  }
}

Settings Reference

SettingTypeDefaultDescription
minDatestring | "today"Earliest selectable date. ISO string or "today"
maxDatestring | "today"Latest selectable date. ISO string or "today"
formatstringlocale defaultDisplay format string (e.g., MM/DD/YYYY, DD-MMM-YYYY)
localestring (BCP 47)browser localeOverride display locale (e.g., en-GB, fr-FR)
firstDayOfWeek06locale default0 = Sunday, 1 = Monday, etc.
disabledDaysnumber[]Day-of-week numbers to disable (0=Sun…6=Sat)
disabledDatesstring[]Specific ISO dates to disable (e.g., public holidays)
showClearButtonbooleantrueShow × button to clear the selected date
showTodayButtonbooleanfalseShow a "Today" shortcut button in the picker
yearRange[number, number][1900, 2100]Year selector range

Stored Value Format

The date picker always stores dates as YYYY-MM-DD strings, regardless of the display format. This ensures consistent data across locales:

// User sees: 25/12/2025 (en-GB locale)
// Stored: "2025-12-25"

// User sees: December 25, 2025 (en-US locale)
// Stored: "2025-12-25"

Date Constraints

Use "today" as a relative reference for dynamic constraints:

// Birth date — must be in the past
{
  "id": "date-of-birth",
  "type": "date",
  "label": "Date of Birth",
  "settings": {
    "maxDate": "today",
    "yearRange": [1900, 2010],
    "showTodayButton": false
  },
  "validation": {
    "required": true
  }
}

// Appointment — must be in the future, weekdays only
{
  "id": "appointment-date",
  "type": "date",
  "label": "Appointment Date",
  "settings": {
    "minDate": "today",
    "disabledDays": [0, 6],
    "showTodayButton": true
  }
}

Date Range with Two Pickers

Implement a start/end date range by linking the minDate of the end picker to the value of the start picker using a visibilityRule-style expression or a dynamic default:

{
  "id": "contract-start",
  "type": "date",
  "label": "Contract Start",
  "width": "half",
  "order": 1,
  "settings": {
    "minDate": "today"
  },
  "binding": { "source": "$json", "path": "contract.startDate" }
},
{
  "id": "contract-end",
  "type": "date",
  "label": "Contract End",
  "width": "half",
  "order": 2,
  "settings": {
    "minDate": "{{values.contract-start}}",
    "showTodayButton": false
  },
  "validation": {
    "required": true
  },
  "binding": { "source": "$json", "path": "contract.endDate" }
}

Locale and Format Examples

LocaleFormat ExampleDisplay
en-USMM/DD/YYYY12/25/2025
en-GBDD/MM/YYYY25/12/2025
fr-FRDD/MM/YYYY25/12/2025
de-DEDD.MM.YYYY25.12.2025
ja-JPYYYY/MM/DD2025/12/25

Disabling Specific Dates

{
  "id": "delivery-date",
  "type": "date",
  "label": "Delivery Date",
  "settings": {
    "minDate": "today",
    "disabledDays": [0, 6],
    "disabledDates": [
      "2025-12-25",
      "2026-01-01",
      "2026-04-06"
    ]
  }
}
defaultValue with Dates Use an ISO date string for a fixed default, or "today" to default to the current date when the form loads: "defaultValue": "today".