Portal Community

Minimal Example

{
  "id": "scheduled-at",
  "type": "datetime",
  "label": "Scheduled At",
  "required": true,
  "width": "half",
  "binding": {
    "source": "$json",
    "path": "task.scheduledAt"
  }
}

Settings Reference

SettingTypeDefaultDescription
minDatestring | "now"Earliest selectable datetime
maxDatestring | "now"Latest selectable datetime
timeFormat"12h" | "24h"locale default12-hour (AM/PM) or 24-hour clock display
minuteStepnumber1Minute increment for the time picker (e.g., 15 for :00/:15/:30/:45)
showSecondsbooleanfalseInclude seconds selector in the time picker
timezonestring (IANA)UTCTimezone for display (e.g., America/New_York)
showTimezoneSelectorbooleanfalseRender a timezone dropdown alongside the picker
localestring (BCP 47)browser localeDisplay locale for date formatting
disabledDaysnumber[]Day-of-week numbers to disable (0=Sun…6=Sat)
showClearButtonbooleantrueShow × button to clear the selection

Stored Value Format

Values are always stored as UTC ISO 8601 strings. Display is localised to the configured timezone:

// User in New York selects "Dec 25, 2025 at 9:00 AM"
// timezone setting: "America/New_York"

// Stored value (UTC):  "2025-12-25T14:00:00Z"
// Displayed to user:   "Dec 25, 2025, 9:00 AM EST"

Appointment Scheduling Example

{
  "id": "appointment-time",
  "type": "datetime",
  "label": "Appointment",
  "description": "Business hours only (Mon–Fri, 9am–5pm)",
  "width": "half",
  "settings": {
    "minDate": "now",
    "timeFormat": "12h",
    "minuteStep": 30,
    "disabledDays": [0, 6],
    "timezone": "America/Chicago",
    "showTimezoneSelector": false
  },
  "validation": {
    "required": true
  },
  "binding": {
    "source": "$json",
    "path": "booking.appointmentTime"
  }
}

12h vs 24h Clock

timeFormatDisplay ExampleTypical Use
"12h"2:30 PMUS, Canada, Australia
"24h"14:30Europe, Asia, API/technical forms

Minute Step Snapping

Use minuteStep to restrict selectable times to intervals, preventing arbitrary times on booking forms:

// Only allow on the hour or half-hour
"minuteStep": 30
// Selectable times: 9:00, 9:30, 10:00, 10:30, ...

// Only allow quarter-hours
"minuteStep": 15
// Selectable times: 9:00, 9:15, 9:30, 9:45, ...

Timezone Selector

When showTimezoneSelector: true, a timezone dropdown renders alongside the picker. The selected timezone affects display only — the stored value is always UTC:

{
  "id": "meeting-time",
  "type": "datetime",
  "label": "Meeting Time",
  "settings": {
    "showTimezoneSelector": true,
    "timezone": "UTC",
    "timeFormat": "24h",
    "minuteStep": 15
  }
}

// User selects timezone: "Europe/London"
// User picks: Jan 15, 2026, 10:00 (London time)
// Stored: "2026-01-15T10:00:00Z" (UTC = London in winter)

Relative Minimum with "now"

Use "now" as a dynamic minDate that always evaluates to the current datetime at the time the form loads. This prevents selecting past times on event registration forms:

{
  "id": "event-start",
  "type": "datetime",
  "label": "Event Start Time",
  "settings": {
    "minDate": "now",
    "minuteStep": 30,
    "timeFormat": "12h"
  }
}
date vs datetime Use date when time is irrelevant (birthdays, deadlines, expiry dates). Use datetime when the exact time matters (appointments, scheduled tasks, event start times, log timestamps).