Skip to main content

Date Module

Everything your workflow needs to read, parse, format, compare, and calculate dates and times without writing code.

The Date Module adds four operation-driven Tasks. Each Task has an Operation selector that picks what it does and reveals only the fields that operation needs: produce a date (read the current time, parse user input, build from parts), modify a date (add/subtract durations, round, period boundaries, time-zone conversion, business-day math), turn a date into text or a number (format, extract a part, difference, humanized duration, relative phrase, age), and route on a date (compare, expiry, business hours, schedules, SLA deadlines, validation). Environment configuration is optional every setting has a sensible default and every Task can override it.

How it works

Read this once; every Task on this page follows the same rules.

  • Accepted input formats. Every date field accepts: ISO-8601 (2026-03-25T10:00:00Z), unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
  • Every output is ISO-8601 UTC. Whatever you feed in, date outputs are stored in the Session as ISO-8601 UTC (for example 2026-03-25T10:00:00Z), so any later Task can read them without guessing the format. The exceptions are Transform Date / Convert time zone (written with the target zone's offset), Get Date / Current time with a display format, and the Extract Date operations that produce human-readable text or a number (Format text, Extract part, Difference, Humanize duration, Relative phrase, Age).
  • All times use the 24-hour clock. Type 17:00, not 5:00 PM in schedule fields, format patterns (HH is the 24-hour hour), and date strings alike.
  • Locale fallback chain. Wherever a Locale field exists: if empty, the platform uses this field → the conversation language → the module's Default locale → en-US.
  • Any valid locale is accepted. Formatting operations (Format text, Extract part) accept any installed .NET/BCP-47 culture, including non-European tags like ja-JP. Humanized wording (Humanize duration, Relative phrase) is localized for all ~78 Humanizer-supported cultures; unknown tags fall back to English.
  • Weekend and holiday day names are English. Fields that list days of the week take comma-separated English day names, e.g. Saturday,Sunday, regardless of locale. Holiday dates are yyyy-MM-dd.
  • Natural-language input is not supported. Phrases like tomorrow or next Friday are rejected. Use Get Date with Operation From text on real date strings, or build relative dates with Get Date (Current time) + Transform Date (Add duration).
  • Optional settings hide behind "Show advanced options." Each Task shows only the fields its chosen Operation needs. The optional overrides (time zone, locale, weekend days, holidays, test anchors, validation bounds) appear once you turn on the Show advanced options toggle; leave it off to use the module defaults.

Configuration

Per-Environment defaults set in the Module's Environment configuration. Every Task accepts the same fields as overrides; when a Task leaves them empty, these defaults apply. A Task-level override replaces the matching default for example, setting Weekend days or Holidays on a Task uses exactly that value instead of the environment value; it does not add to it.

FieldRequiredDefaultExampleDescription
Default time zoneNoUTCEurope/RomeIANA or Windows time zone id used when a Task does not specify one. Leave blank for UTC.
Default localeNoen-USen-USLanguage/region tag used when a Task's Locale field is empty and the conversation has no language.
Week starts onNoMondayMondayFirst day of the week for Transform Date Start of / End of (week). Options: Monday, Sunday, Saturday.
Weekend daysNoSaturday,SundaySaturday,SundayComma-separated English day names treated as weekend by business-day operations. Day names are always English regardless of locale.
Holiday calendar (yyyy-MM-dd)Noempty2026-01-01,2026-04-25,2026-12-25Dates to treat as non-working days, yyyy-MM-dd, comma- or newline-separated. Used by the business-day and schedule operations when their Holidays field is empty.

All Tasks in this module are generic they behave the same on every Channel.

Tasks

The module ships four Tasks. The first three are ordinary Tasks; Check Date is an Exclusive Gateway that routes the Token. Inside each Task, the Operation selector decides what runs and which fields appear; optional override fields stay hidden until you enable Show advanced options. In the property tables below, fields marked optional are the ones revealed by that toggle.

Get Date

Produces a date value from the wall clock, from a free-form string, or from individual parts.

Operation

OperationWhat it does
Current time (Now)Reads the current instant and writes it out the seed for any downstream date arithmetic, SLA timer, or audit stamp. Default.
From text (Parse)Normalizes a free-form date string typically typed by a user into a clean ISO-8601 UTC value.
From parts (Build)Assembles a datetime from individual year / month / day / hour / minute / second values.

Properties

PropertyOperationRequiredExampleNotes
Operation(all)YesFrom textPicks what the Task produces. Options: Current time, From text, From parts. Default: Current time.
Text to parseFrom textYes25/12/2026 18:00 or {userInput}The raw date string to normalize. Accepts: ISO-8601 (2026-03-25T10:00:00Z), unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}. Natural-language like tomorrow is not supported.
Required format (optional)From textNodd/MM/yyyy HH:mmThe exact format the input must be written in, e.g. dd/MM/yyyy HH:mm. When set, the text must match it exactly or the Task fails use it when you know how the date arrives. Leave blank to auto-detect. Times use the 24-hour clock (type 17:00, not 5:00 PM).
Source time zone (optional)From textNoEurope/RomeTime zone the input is expressed in used only when the string itself has no zone indicator. Default: the module's Default time zone (UTC).
YearFrom partsYes2026 or {year}Four digits.
MonthFrom partsYes12 or {month}1–12.
DayFrom partsYes25 or {day}1–31; must exist in the chosen month.
HourFrom partsNo18 or {hour}0–23, 24-hour clock (type 17:00, not 5:00 PM). Default: 0.
MinuteFrom partsNo30 or {minute}0–59. Default: 0.
SecondFrom partsNo0 or {second}0–59. Default: 0.
FormatCurrent timeNoisoOutput format. Default: iso (ISO-8601 UTC). Built-in: iso, iso-local, unix, unix-ms, rfc1123, date, long-date, time, long-time or any custom .NET format string such as dd MMM yyyy HH:mm (HH is the 24-hour hour).
Time zone (optional)Current time, From partsNoEurope/RomeFor From parts, the zone the supplied components are in; for Current time, the zone locale-aware formats render in. Default: the module's Default time zone (UTC).
Locale (optional)Current time, From textNoit-ITUsed by locale-aware Current time formats and to interpret culture-formatted From text inputs. Language/region tag, e.g. en-US, it-IT, ja-JP any valid culture is accepted. If empty, the platform uses: this field → the conversation language → the module's Default locale → en-US.
Output variable(all)YesnowVariable name (no braces) that receives the produced date (ISO-8601 UTC, except Current time with a display format). Later Tasks read it as {now}.

Behavior

  1. The Task resolves any {variable} placeholders in the fields the chosen Operation uses.
  2. Current time renders the current instant with Format, Time zone, and Locale; From text detects the format (or enforces Required format) and interprets zone-less values in the Source time zone; From parts combines the components in the given Time zone and converts to UTC.
  3. It writes the result to the output variable.

Example

Operation From text, Text to parse 25/12/2026 18:00, Locale it-IT, Source time zone Europe/Rome, output variable parsedDate. Result: {parsedDate} = 2026-12-25T17:00:00Z (18:00 in Rome is 17:00 UTC in December).

warning

Natural-language phrases like tomorrow, next Friday, or domani are not supported and will fail to parse. Build relative dates with Get Date (Current time) + Transform Date (Add duration) instead.

Transform Date

Transforms one date into another shift it, round it, snap it to a period boundary, convert its time zone, or walk it across business days.

Operation

OperationWhat it does
Add duration (Add)Shifts the date forward (or backward, with a negative amount) by seconds, minutes, hours, days, weeks, months, or years. Default.
Subtract duration (Subtract)Shifts the date backward by a positive amount.
Round (Round)Snaps the date onto a regular grid time slots, top of the hour, whole days.
Start of period (StartOf)Returns the start of the day, week, month, quarter, or year that contains the date.
End of period (EndOf)Returns the last instant of the day, week, month, quarter, or year that contains the date.
Convert time zone (ConvertTimeZone)Re-expresses the date in another time zone.
Add business days (AddBusinessDays)Shifts the date by a number of working days, skipping (and not counting) weekends and holidays.
Next business day (NextBusinessDay)Rolls the date forward to the next working day.

Properties

PropertyOperationRequiredExampleNotes
Operation(all)YesAdd durationPicks the transform. Default: Add duration.
Input date(all)Yes2026-03-25T10:00:00Z or {appointmentUtc}The datetime to transform. Accepts: ISO-8601 (2026-03-25T10:00:00Z), unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
AmountAdd, SubtractYes24 or {hoursToAdd}Integer. For Add duration it may be negative; for Subtract duration use a positive value. Supports {variables}.
UnitAdd, SubtractYesHoursDefault: Hours. Options: Seconds, Minutes, Hours, Days, Weeks, Months, Years. Months / Years use calendar arithmetic 31 January + 1 month is 28/29 February, not "30 days later".
Nearest amountRoundYes15Default: 15. Size of the rounding interval, in Nearest unit. Buckets align to the wall clock from local midnight in the chosen Time zone. Per-unit caps: Seconds ≤ 60, Minutes ≤ 60, Hours ≤ 24, Days ≤ 366.
Nearest unitRoundYesMinutesDefault: Minutes. Options: Seconds, Minutes, Hours, Days.
DirectionRoundNonearestDefault: nearest (closest boundary). down always rounds earlier (floor); up always rounds later (ceiling).
PeriodStartOf, EndOfYesweekDefault: day. Options: day, week (see Week starts on), month, quarter, year.
Week starts onStartOf, EndOfNoMondayUsed only when Period = week. Options: Monday, Sunday, Saturday. Default: the module's Week starts on (Monday).
From time zoneConvertTimeZoneNoUTCUsed only when the input string has no zone indicator. Default: the module's Default time zone (UTC).
To time zoneConvertTimeZoneYesAmerica/New_YorkIANA or Windows time zone id the output should reflect.
Business daysAddBusinessDaysYes3Default: 1. Signed integer, −3650 to 3650; a negative value walks backwards. Weekends and holidays are skipped and not counted.
If already a business dayNextBusinessDayNosameDefault: same keep the input when it is already a business day. next always moves forward at least one business day.
Time zone (optional)Round, StartOf, EndOf, AddBusinessDays, NextBusinessDayNoEurope/RomeThe zone the operation is evaluated in Round anchors its buckets to local midnight here; Start of / End of and business-day walks decide the local calendar day from it. Default: the module's Default time zone (UTC).
Weekend days (optional)AddBusinessDays, NextBusinessDayNoSaturday,SundayComma-separated English day names, e.g. Saturday,Sunday. Day names are always English regardless of locale. Empty = module default.
Holidays (yyyy-MM-dd, optional)AddBusinessDays, NextBusinessDayNo2026-12-25Dates to treat as non-working days, yyyy-MM-dd, comma- or newline-separated, e.g. 2026-12-25. Empty = module default holiday calendar.
Output variable(all)YesshiftedDateVariable name (no braces) that receives the transformed datetime ISO-8601 UTC, or the target-zone offset for Convert time zone.

Round recipes

GoalNearest amountNearest unit
Nearest 15 minutes (09:00, 09:15, 09:30, …)15Minutes
Top of the hour1Hours
Whole day1Days

To round to a unit boundary, use amount 1 of the bigger unit top of the hour is 1 Hours, not "Minutes nearest 00".

Behavior

  1. The Task parses Input date and resolves any {variable} placeholders.
  2. It applies the chosen Operation: calendar-aware shift (Add/Subtract), grid snap in the chosen Direction (Round), period boundary (Start of / End of), instant re-expression (Convert time zone), or a day-by-day walk that skips weekends and holidays (Add business days, Next business day).
  3. It writes the result to the output variable.

Example Add duration

A 24-hour reminder: Operation Add duration, Input date {appointmentUtc} = 2026-03-25T10:00:00Z, Amount -1, Unit Days, output variable remindAt. Result: {remindAt} = 2026-03-24T10:00:00Z.

Example Round

Operation Round, Input date 2026-03-25T10:07:00Z, Nearest amount 5, Nearest unit Minutes. With Direction nearest the result is 10:05 (07 past is closer to 05 than 10); with up it is 10:10; with down it is 10:05.

Extract Date

Turns a date into text or a number a formatted string, a single component, a difference, a friendly phrase, or an age.

Operation

OperationWhat it doesOutput
Format text (Format)Renders a stored datetime as a user-facing string in the customer's locale and time zone. Default.Text
Extract part (ExtractPart)Pulls one component out of a datetime year, quarter, localized weekday name, and so on.Number, or localized text for WeekdayName
Difference (Diff)Measures the distance between two datetimes (Date B minus Date A) in the unit you choose.Number
Humanize duration (Humanize)Renders a duration as a friendly, localized phrase "2 hours and 5 minutes".Text
Relative phrase (RelativeTime)Renders a datetime as a phrase relative to now "3 days from now", "5 minutes ago".Text
Age (Age)Returns how old a reference datetime is, as a whole number in the unit you pick.Number

Properties

PropertyOperationRequiredExampleNotes
Operation(all)YesFormat textPicks what the Task produces. Default: Format text.
Input dateFormat, ExtractPart, RelativeTime, AgeYes2026-03-25T10:00:00Z or {appointmentUtc}The datetime to read (the reference moment for Age). Accepts: ISO-8601 (2026-03-25T10:00:00Z), unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
PatternFormatNoLong date or Custom…Default: Long date. A selector of built-in formats: ISO-8601 (UTC), ISO-8601 (local), Unix seconds, Unix milliseconds, RFC 1123, Short date, Long date, Short time, Long time. Choose Custom… to reveal the Custom pattern field.
Custom patternFormat (Pattern = Custom…)Yesdd MMM yyyy HH:mmA custom .NET format string, revealed only when Pattern is Custom… (HH is the 24-hour hour). Times use the 24-hour clock (type 17:00, not 5:00 PM).
PartExtractPartYesWeekdayNameDefault: Year. Options: Year, Month, Day, Hour, Minute, Second, Weekday, WeekdayName, Quarter, IsoWeek, DayOfYear. WeekdayName is localized text; everything else is a number.
Date A (from)Diff, HumanizeYes for Diff2026-03-18T10:00:00Z or {createdAt}Start datetime the "from" side. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
Date B (to)Diff, HumanizeYes for Diff2026-03-25T16:00:00Z or {now}End datetime the "to" side. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
UnitDiffYesDaysDefault: Days. Options: Seconds, Minutes, Hours, Days, Weeks, Months, Years. Fixed units can return fractions (e.g. 7.25 days); Months / Years walk the calendar.
ModeDiffNoSignedDefault: Signed (B − A, can be negative). Absolute returns the unsigned magnitude.
PrecisionDiffNo2Default: 2. Decimal places kept, 0–6. Precision 0 returns an integer (truncated toward zero).
Seconds (optional)HumanizeNo7500 or {ttlSeconds}Duration in seconds typically a {variable} from an earlier Difference (in Seconds). Leave blank to use Date A → Date B instead.
ComponentsHumanizeNo2Default: 2. How many duration components to render, 1–4: 1 → "2 hours"; 2 → "2 hours and 5 minutes".
Unit (Age)AgeYesYearsDefault: Years. Options: Seconds, Minutes, Hours, Days, Weeks, Months, Years.
Now / As of (optional)RelativeTime, AgeNo2026-06-10T00:00:00Z or {now}Test/override anchor fixes the instant "now" is measured from. Leave blank to use the actual current time. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date, or a {variable}.
Time zone (optional)Format, ExtractPartNoEurope/RomeThe zone the formatted output reflects (Format) or the part is computed in (Extract part, so Day aligns to local midnight). Default: the module's Default time zone (UTC).
Locale (optional)Format, ExtractPart, Humanize, RelativeTimeNoit-ITUsed for month/weekday names and humanized wording. Language/region tag, e.g. en-US, it-IT, ja-JP any valid culture is accepted. If empty, the platform uses: this field → the conversation language → the module's Default locale → en-US. Humanized wording is localized for all ~78 Humanizer-supported cultures; unknown tags fall back to English.
Output variable(all)YesprettyDateVariable name (no braces) that receives the produced text or number.

Behavior

  1. The Task parses the date input(s) the chosen Operation uses and converts to the requested Time zone where relevant.
  2. It produces the value: a formatted string (Format text), a single component (Extract part), a numeric difference with Mode and Precision (Difference), a localized phrase (Humanize duration, Relative phrase), or a truncated whole-number age (Age).
  3. It writes the result to the output variable.

Example Format text

Operation Format text, Input date {appointmentUtc} = 2026-05-25T12:30:00Z, Pattern Custom…, Custom pattern dddd d MMMM HH:mm, Locale it-IT, Time zone Europe/Rome, output variable prettyDate. Result: {prettyDate} = lunedì 25 maggio 14:30 ready to drop into a message.

Example Difference

Operation Difference, Date A (from) {createdAt} = 2026-03-18T10:00:00Z, Date B (to) {now} = 2026-03-25T16:00:00Z, Unit Days, Mode Signed, Precision 2, output variable daysOpen. Result: {daysOpen} = 7.25.

Check Date

A gateway Task (Exclusive Gateway): runs one routing test and sends the Token down the matching branch. Two operations also write a Session variable.

Label each outgoing Sequence Flow with the matching route value. Labels are case-sensitive.

Operation and route values

OperationRoute valuesAlso writes
Compare two dates (Compare)before / equal / after / within
Is expired? (IsExpired)expired / valid
Is business day? (IsBusinessDay)business / weekend / holiday
Is within schedule? (IsWithinSchedule)inside / outside
SLA deadline (SLADeadline)met / breachedthe computed deadline (to the output variable)
Validate (Validate)valid / invalid / outOfRangethe parsed value (on the valid branch)

Branch meaning

  • Compare two dates: within (checked first, when Tolerance amount > 0 and the dates are no further apart than the tolerance) · before (A earlier than B) · after (A later than B) · equal (the exact same instant).
  • Is expired?: expired (Now minus Reference is at least the TTL) · valid (the window is still open).
  • Is business day?: holiday (checked first a holiday on a Saturday routes here) · weekend (the day is in the weekend set) · business (any other day).
  • Is within schedule?: inside (active weekday, between Start and End time, not a holiday) · outside (anything else, including holidays even when the weekly window would be open).
  • SLA deadline: met (Now is at or before the computed deadline) · breached (Now is past it).
  • Validate: valid (parses and inside the allowed window the clean value is written to the output variable) · invalid (empty or unparseable) · outOfRange (parses but before Min date or after Max date).

Properties

PropertyOperationRequiredExampleNotes
Operation(all)YesIs expired?Picks the routing test. Default: Compare two dates.
Date ACompareYes2026-03-25T10:00:00Z or {deadline}First datetime before means A is earlier than B. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
Date BCompareYes2026-03-25T10:05:00Z or {now}Second datetime. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
Tolerance amountCompareNo5Default: 0 (tolerance check disabled). When greater than 0, dates closer than the tolerance route to within.
Tolerance unitCompareNoMinutesDefault: Minutes. Options: Seconds, Minutes, Hours, Days.
ReferenceIsExpiredYes2026-03-25T10:00:00Z or {otpSentAt}Moment the countdown starts from (e.g. when the OTP was sent). Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
TTL amountIsExpiredYes5Default: 5. How long the reference stays valid, in TTL unit.
TTL unitIsExpiredYesMinutesDefault: Minutes. Options: Seconds, Minutes, Hours, Days, Weeks, Months, Years.
Input dateIsBusinessDayYes2026-12-25T10:00:00Z or {now}The datetime to classify. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
Schedule time zone (optional)IsWithinScheduleNoEurope/RomeZone the Start/End times and weekdays are evaluated in. Empty = the module's Default time zone (UTC). Revealed by Show advanced options.
WeekdaysIsWithinScheduleNoMonday,Tuesday,Wednesday,Thursday,FridayComma-separated English day names the schedule is active on. Day names are always English regardless of locale. Empty = every day.
Start timeIsWithinScheduleNo09:00Local time the window opens, HH:mm. Default: 09:00. Times use the 24-hour clock (type 17:00, not 5:00 PM).
End timeIsWithinScheduleNo17:00Local time the window closes, HH:mm. Default: 17:00. Use 24:00 for end-of-day; when End is earlier than Start, the window wraps past midnight; when Start equals End the window is the full 24 hours. Times use the 24-hour clock.
When (optional)IsWithinScheduleNo2026-06-10T14:00:00Z or {now}Instant to test. Test/override anchor leave blank to use the actual current time. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date, or a {variable}.
StartSLADeadlineYes2026-06-12T15:00:00Z or {ticketCreatedAt}Moment the SLA clock starts. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
SLA amountSLADeadlineYes8Default: 24. Length of the SLA window, in SLA unit.
SLA unitSLADeadlineYesHoursDefault: Hours. Options: Minutes, Hours, Days.
ModeSLADeadlineNobusinessDefault: calendar (every hour counts). business skips configured weekend days and holidays while accruing the SLA; in business mode use Days or Hours (minutes are treated as calendar time).
InputValidateYes25/12/1989 or {userDob}The date string to validate, typically user-supplied. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date (set Locale), or a {variable}.
Required format (optional)ValidateNodd/MM/yyyyThe exact format the input must be written in, e.g. dd/MM/yyyy. When set, the input must match it exactly or the Token leaves on invalid. Leave blank to auto-detect. Times use the 24-hour clock.
Source time zone (optional)ValidateNoEurope/RomeZone applied to inputs with no zone indicator. Default: the module's Default time zone (UTC).
Locale (optional)ValidateNoit-ITUsed to interpret culture-formatted inputs (month names, separators). Any valid culture is accepted, e.g. en-US, it-IT, ja-JP. If empty, the platform uses: this field → the conversation language → the module's Default locale → en-US.
Min date (optional)ValidateNo1900-01-01Inclusive lower bound the bound itself is accepted; anything earlier leaves on outOfRange. Leave empty for no lower bound (there is no implicit default the 1900-01-01 shown is only an example). Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date, or a {variable}.
Max date (optional)ValidateNo{today}Inclusive upper bound the bound itself is accepted; anything later leaves on outOfRange. Leave empty for no upper bound (there is no implicit default). Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date, or a {variable}.
Now (optional)IsExpired, SLADeadlineNo2026-03-25T10:06:00Z or {now}Test/override anchor fixes the instant "now" is measured from. Leave blank to use the actual current time. Accepts: ISO-8601, unix seconds or milliseconds, RFC 1123, a locale-formatted date, or a {variable}.
Time zone (optional)IsExpired, IsBusinessDay, SLADeadlineNoEurope/RomeApplied to zone-less inputs and to local calendar-day decisions. Default: the module's Default time zone (UTC).
Weekend days (optional)IsBusinessDay, SLADeadlineNoSaturday,SundayComma-separated English day names, e.g. Saturday,Sunday. Day names are always English regardless of locale. Empty = module default.
Holidays (yyyy-MM-dd, optional)IsBusinessDay, IsWithinSchedule, SLADeadlineNo2026-12-25,2026-01-01Dates to treat as non-working days, yyyy-MM-dd, comma- or newline-separated. Empty = module default holiday calendar.
Output variableSLADeadline, ValidateYesslaDeadlineVariable name (no braces). For SLA deadline it receives the computed deadline (ISO-8601 UTC); for Validate it receives the parsed ISO-8601 UTC value, written only on the valid branch.

Behavior

  1. The Task parses the date input(s) the chosen Operation uses, applying Time zone to zone-less values.
  2. It runs the routing test and, for SLA deadline and Validate, writes its variable.
  3. The Token leaves on the route value for the outcome wire one outgoing Sequence Flow per value.

Example Is expired?

An OTP check: Operation Is expired?, Reference {otpSentAt} = 2026-03-25T10:00:00Z, TTL amount 5, TTL unit Minutes. When the user replies at 10:06 UTC, 6 minutes have elapsed the Token leaves on expired and the workflow asks for a new code.

Example Validate

Validating a date of birth: Operation Validate, Input {userDob} = 25/12/1989, Locale it-IT, Min date 1900-01-01, Max date {today}, output variable dob. The input parses, 25 December 1989 is between the bounds, so {dob} = 1989-12-25T00:00:00Z and the Token leaves on valid. A typo like 25/13/1989 would leave on invalid; a future date like 25/12/2030 would leave on outOfRange wire each branch to its own re-prompt message.

Common recipes

Escalate a ticket when its SLA is breached

Compute a business-hours response deadline for a ticket, tell the customer when to expect a reply, and hand the Session to a live agent the moment the deadline is missed using the Standard Module's OutputTask and the Aculab Module's SendToAgentTask.

  1. Check Date Operation SLA deadline, Start {ticketCreatedAt}, SLA amount 8, SLA unit Hours, Mode business, output variable slaDeadline. Label the two outgoing Sequence Flows met and breached.
  2. met branch Extract Date Operation Format text, Input date {slaDeadline}, Pattern Custom…, Custom pattern dddd d MMMM HH:mm, Time zone Europe/Rome, Locale it-IT, output variable dueText.
  3. OutputTask (Standard Module) message: We're on it you'll hear from us by {dueText}.
  4. breached branch SendToAgentTask (Aculab Module) hands the Session to a live agent so a human picks up the overdue ticket immediately.

Remind a customer before their appointment

Validate a user-typed appointment date and schedule a reminder 24 hours before it, using the Standard Module's InputTask/OutputTask and the Scheduler Module's ScheduleReminder.

  1. Get Date Operation Current time, Format iso, output variable now captures the current instant to use as the validity lower bound.
  2. InputTask (Standard Module) asks "When is your appointment?" and stores the reply in appointmentDate.
  3. Check Date Operation Validate, Input {appointmentDate}, Locale it-IT, Min date {now}, output variable appointment. Label the outgoing Sequence Flows valid, invalid, and outOfRange.
  4. valid branch ScheduleReminder (Scheduler Module) When should it fire? Before another date, Amount 24, Unit Hours, Reference date variable {appointment} fires a new Session 24 hours before the appointment.
  5. OutputTask (Standard Module) confirms: Done we'll remind you the day before.
  6. invalid / outOfRange branches OutputTask (Standard Module) replies That date doesn't look right please type it again, e.g. 25/12/2026 18:00 and loops back to the InputTask.

Troubleshooting

  • "Could not parse '…' as a date/time." What you typed (or what the variable contained) is not one of the accepted formats ISO-8601, unix seconds/milliseconds, RFC 1123, or a date written in the resolved locale. Check the variable's actual value in the Session details; if the date always arrives in one known shape, set Required format so the Task enforces it. Remember that natural-language phrases like tomorrow are not supported.
  • "Unknown time zone '…'." The time zone field contains a value the platform doesn't recognize. Use an IANA id such as Europe/Rome or America/New_York (Windows ids like W. Europe Standard Time also work). Plain abbreviations like CET or EST do not.
  • The result is off by a few hours. Your input had no zone indicator (no Z or offset) and was interpreted in the wrong zone. Set Source time zone (or From time zone) to the zone the value is actually expressed in.
  • The output variable was never written. The output field must contain a variable name. Open the Task, type the name (no braces), and save. For Check Date with Operation Validate, also remember the output is written only on the valid branch.
  • A gateway Token took an unexpected path. Check that each outgoing Sequence Flow label matches the route values for the chosen Operation exactly as documented (inside, outside, met, breached, …) labels are case-sensitive.
  • "Unknown unit '…'." The unit value isn't one of the documented options. This normally can't happen from the form's dropdowns re-select the unit and save.

Best practices

  1. Normalize once, early. Run Get Date (From text) or Check Date (Validate) when you also need range checks right after collecting a user-supplied date so every later Task works with clean ISO-8601 UTC.
  2. Store UTC, format late. Keep dates in Session variables as ISO-8601 UTC and use Extract Date (Format text) only at the last moment before showing the date to a person.
  3. Set the module defaults for your audience. Configure Default time zone, Default locale, Weekend days, and the Holiday calendar once per Environment instead of repeating them in every Task.
  4. Always label every gateway branch. Check Date emits a different set of route values per Operation wire one Sequence Flow per value, including the unhappy ones (invalid, outOfRange, breached).
  5. Use the Now / As of override only for testing. It freezes "now" great for verifying branch logic, wrong in production.

Error codes

CodeNameDescription
3005TaskInvalidDataA required field is empty, a date could not be parsed, a time zone or unit is not recognized, or the output field is not a valid variable name. See full details