🚀 Coming Soon to AppExchange — 2026

multiDatePickDateTime

Schedule Dates and Times in Salesforce Flows. Combine multi-date selection with per-date time picking for appointments, sessions, and shifts.

Install from AppExchange
multiDatePickDateTime component in action

Overview

multiDatePickDateTime extends the date selection calendar with time picking. After selecting dates, users assign a start time (and optionally an end time) to each one using dropdown menus or a visual time slot grid. You control the time interval (15, 30, or 60 minutes), the visible time range, and whether each date can have a different time or all dates share the same time.

Use this component when your Flow or Record Page needs both a date and a time — for appointment scheduling, session booking, shift planning, or any workflow where the time of day matters.

⚡ Lightning Page Instructions

1

What You Need First

Create a child object to store date+time entries. It needs a Date field, one or two Time fields, and a Lookup back to the parent. For example, an Appointment__c object:

FieldTypePurpose
Appointment_Date__cDateStores the selected date
Start_Time__cTimeStores the start time
End_Time__cTimeStores the end time (optional)
Contact__cLookupLinks back to the parent record
💡
Note: {!recordId} is passed automatically on Record Pages — you don't need to wire it manually.
2

Drop It In

Drag multiDatePickDateTime onto your Record Page in App Builder and configure these key properties:

  • relatedObjectApiName — API name of your date/time object, e.g. Appointment__c
  • dateFieldApiName — the Date field, e.g. Appointment_Date__c
  • relationshipFieldApiName — the Lookup field back to the parent, e.g. Contact__c
  • startTimeField — the Start Time field, e.g. Start_Time__c
  • endTimeField — the End Time field, e.g. End_Time__c
  • enableEndTime — set to ON to show both Start and End Time pickers
  • enableConflictCheck — set to ON to block overlapping time slots based on existing records
3

What Comes Out

One record per date with time fields populated. When the user selects dates, assigns times, and clicks Save, the component creates one record per date on your specified object — with the date, start time, and end time fields filled in. Enable "Conflict Checking" to automatically block time slots that overlap with existing records. The component uses additive save — it inserts new records but does not delete existing ones.

🔄 Flow Instructions

1

What You Need First

Same object setup as Record Page above. Then create Flow variables based on your use case — pick one output approach:

Variable NameTypeCollection?Notes
{!selectedDates}TextYesDates only (no time info) — use if you just need the dates
{!dateTimesJson}TextNoDates + times as JSON — feed to MultiDatePickParser for loopable entries
2

Drop It In

Add a Screen element in Flow Builder, drag multiDatePickDateTime onto it, and configure:

  • label — button text, e.g. "Schedule Appointments"
  • modalTitle — calendar modal title, e.g. "Pick Dates & Times"
  • showInline — set to ON to embed the calendar directly
  • relatedObjectApiName — your date/time object, e.g. Appointment__c (for auto-save)
  • dateFieldApiName — the Date field, e.g. Appointment_Date__c
  • relationshipFieldApiName — the Lookup field, e.g. Contact__c
  • startTimeField — the Start Time field, e.g. Start_Time__c
  • endTimeField — the End Time field, e.g. End_Time__c
  • enableEndTime — set to ON to capture both start and end times
  • selectedDates (Output) — wire to {!selectedDates} for dates only
  • selectedDatesWithTimesJson (Output) — wire to {!dateTimesJson} for dates + times
3

What Comes Out

Dates-only or dates+times — your choice. {!selectedDates} gives you a simple array of dates. For dates with times, feed {!dateTimesJson} to the MultiDatePickParser invocable action — it returns loopable entries with fromDate, toDate, startTime, and endTime fields. If you configured the Related Object fields, the component also auto-saves records with time data.
All Properties Reference

Display Properties

All display properties from multiDatePickDates are also available (label, modalTitle, showInline, singleMonthView, calendarSize, etc.).

Time Selection Properties

PropertyTypeDefaultDescription
timeIntervalInteger30Minutes between time options. Options: 15, 30, or 60.
minTimeStringEarliest time in 24-hour format (HH:mm), e.g. 08:00.
maxTimeStringLatest time in 24-hour format (HH:mm), e.g. 17:00.
timeDisplayModeStringgrid'grid' (visual slot grid) or 'dropdown' (time pickers).
allowDifferentTimesBooleanfalseWhen ON with dropdown mode, each date gets its own time picker.
enableEndTimeBooleanfalseWhen ON, shows a separate End Time alongside Start Time.

Constraint Properties

All constraint properties from multiDatePickDates are also available (maxSelections, allowPastDates, minDate, maxDate, etc.).

Output Properties (Read-Only)

PropertyTypeDescription
selectedDatesString[]Array of selected dates in ISO format, without time.
selectedDatesWithTimesJsonStringJSON string with each date and its selected time(s).
selectedDateRangesJsonStringJSON of consecutive dates grouped into ranges (no time). Only when outputAsJson is ON.

Record Page Auto-Save Properties

All auto-save properties from multiDatePickDates are available, plus:

PropertyTypeDefaultDescription
startTimeFieldStringAPI name of the field for the selected start time.
endTimeFieldStringAPI name of the field for the selected end time.
enableConflictCheckBooleanfalseWhen ON, checks for time conflicts against existing records.
conflictLookAheadDaysInteger180How many days ahead to check for conflicts.
skipConflictsOnSaveBooleanfalseWhen ON in shared grid mode, conflicting dates are skipped at save time.