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, not5:00 PMin schedule fields, format patterns (HHis 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 areyyyy-MM-dd. - Natural-language input is not supported. Phrases like
tomorrowornext Fridayare rejected. Use Get Date with OperationFrom texton 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.
| Field | Required | Default | Example | Description |
|---|---|---|---|---|
| Default time zone | No | UTC | Europe/Rome | IANA or Windows time zone id used when a Task does not specify one. Leave blank for UTC. |
| Default locale | No | en-US | en-US | Language/region tag used when a Task's Locale field is empty and the conversation has no language. |
| Week starts on | No | Monday | Monday | First day of the week for Transform Date Start of / End of (week). Options: Monday, Sunday, Saturday. |
| Weekend days | No | Saturday,Sunday | Saturday,Sunday | Comma-separated English day names treated as weekend by business-day operations. Day names are always English regardless of locale. |
| Holiday calendar (yyyy-MM-dd) | No | empty | 2026-01-01,2026-04-25,2026-12-25 | Dates 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
| Operation | What 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
| Property | Operation | Required | Example | Notes |
|---|---|---|---|---|
| Operation | (all) | Yes | From text | Picks what the Task produces. Options: Current time, From text, From parts. Default: Current time. |
| Text to parse | From text | Yes | 25/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 text | No | dd/MM/yyyy HH:mm | The 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 text | No | Europe/Rome | Time zone the input is expressed in used only when the string itself has no zone indicator. Default: the module's Default time zone (UTC). |
| Year | From parts | Yes | 2026 or {year} | Four digits. |
| Month | From parts | Yes | 12 or {month} | 1–12. |
| Day | From parts | Yes | 25 or {day} | 1–31; must exist in the chosen month. |
| Hour | From parts | No | 18 or {hour} | 0–23, 24-hour clock (type 17:00, not 5:00 PM). Default: 0. |
| Minute | From parts | No | 30 or {minute} | 0–59. Default: 0. |
| Second | From parts | No | 0 or {second} | 0–59. Default: 0. |
| Format | Current time | No | iso | Output 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 parts | No | Europe/Rome | For 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 text | No | it-IT | Used 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) | Yes | now | Variable 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
- The Task resolves any
{variable}placeholders in the fields the chosen Operation uses. - 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.
- 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).
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
| Operation | What 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
| Property | Operation | Required | Example | Notes |
|---|---|---|---|---|
| Operation | (all) | Yes | Add duration | Picks the transform. Default: Add duration. |
| Input date | (all) | Yes | 2026-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}. |
| Amount | Add, Subtract | Yes | 24 or {hoursToAdd} | Integer. For Add duration it may be negative; for Subtract duration use a positive value. Supports {variables}. |
| Unit | Add, Subtract | Yes | Hours | Default: 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 amount | Round | Yes | 15 | Default: 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 unit | Round | Yes | Minutes | Default: Minutes. Options: Seconds, Minutes, Hours, Days. |
| Direction | Round | No | nearest | Default: nearest (closest boundary). down always rounds earlier (floor); up always rounds later (ceiling). |
| Period | StartOf, EndOf | Yes | week | Default: day. Options: day, week (see Week starts on), month, quarter, year. |
| Week starts on | StartOf, EndOf | No | Monday | Used only when Period = week. Options: Monday, Sunday, Saturday. Default: the module's Week starts on (Monday). |
| From time zone | ConvertTimeZone | No | UTC | Used only when the input string has no zone indicator. Default: the module's Default time zone (UTC). |
| To time zone | ConvertTimeZone | Yes | America/New_York | IANA or Windows time zone id the output should reflect. |
| Business days | AddBusinessDays | Yes | 3 | Default: 1. Signed integer, −3650 to 3650; a negative value walks backwards. Weekends and holidays are skipped and not counted. |
| If already a business day | NextBusinessDay | No | same | Default: 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, NextBusinessDay | No | Europe/Rome | The 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, NextBusinessDay | No | Saturday,Sunday | Comma-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, NextBusinessDay | No | 2026-12-25 | Dates 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) | Yes | shiftedDate | Variable name (no braces) that receives the transformed datetime ISO-8601 UTC, or the target-zone offset for Convert time zone. |
Round recipes
| Goal | Nearest amount | Nearest unit |
|---|---|---|
| Nearest 15 minutes (09:00, 09:15, 09:30, …) | 15 | Minutes |
| Top of the hour | 1 | Hours |
| Whole day | 1 | Days |
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
- The Task parses Input date and resolves any
{variable}placeholders. - 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).
- 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
| Operation | What it does | Output |
|---|---|---|
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
| Property | Operation | Required | Example | Notes |
|---|---|---|---|---|
| Operation | (all) | Yes | Format text | Picks what the Task produces. Default: Format text. |
| Input date | Format, ExtractPart, RelativeTime, Age | Yes | 2026-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}. |
| Pattern | Format | No | Long 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 pattern | Format (Pattern = Custom…) | Yes | dd MMM yyyy HH:mm | A 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). |
| Part | ExtractPart | Yes | WeekdayName | Default: 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, Humanize | Yes for Diff | 2026-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, Humanize | Yes for Diff | 2026-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}. |
| Unit | Diff | Yes | Days | Default: Days. Options: Seconds, Minutes, Hours, Days, Weeks, Months, Years. Fixed units can return fractions (e.g. 7.25 days); Months / Years walk the calendar. |
| Mode | Diff | No | Signed | Default: Signed (B − A, can be negative). Absolute returns the unsigned magnitude. |
| Precision | Diff | No | 2 | Default: 2. Decimal places kept, 0–6. Precision 0 returns an integer (truncated toward zero). |
| Seconds (optional) | Humanize | No | 7500 or {ttlSeconds} | Duration in seconds typically a {variable} from an earlier Difference (in Seconds). Leave blank to use Date A → Date B instead. |
| Components | Humanize | No | 2 | Default: 2. How many duration components to render, 1–4: 1 → "2 hours"; 2 → "2 hours and 5 minutes". |
| Unit (Age) | Age | Yes | Years | Default: Years. Options: Seconds, Minutes, Hours, Days, Weeks, Months, Years. |
| Now / As of (optional) | RelativeTime, Age | No | 2026-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, ExtractPart | No | Europe/Rome | The 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, RelativeTime | No | it-IT | Used 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) | Yes | prettyDate | Variable name (no braces) that receives the produced text or number. |
Behavior
- The Task parses the date input(s) the chosen Operation uses and converts to the requested Time zone where relevant.
- 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).
- 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
| Operation | Route values | Also 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 / breached | the computed deadline (to the output variable) |
Validate (Validate) | valid / invalid / outOfRange | the 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
| Property | Operation | Required | Example | Notes |
|---|---|---|---|---|
| Operation | (all) | Yes | Is expired? | Picks the routing test. Default: Compare two dates. |
| Date A | Compare | Yes | 2026-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 B | Compare | Yes | 2026-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 amount | Compare | No | 5 | Default: 0 (tolerance check disabled). When greater than 0, dates closer than the tolerance route to within. |
| Tolerance unit | Compare | No | Minutes | Default: Minutes. Options: Seconds, Minutes, Hours, Days. |
| Reference | IsExpired | Yes | 2026-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 amount | IsExpired | Yes | 5 | Default: 5. How long the reference stays valid, in TTL unit. |
| TTL unit | IsExpired | Yes | Minutes | Default: Minutes. Options: Seconds, Minutes, Hours, Days, Weeks, Months, Years. |
| Input date | IsBusinessDay | Yes | 2026-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) | IsWithinSchedule | No | Europe/Rome | Zone the Start/End times and weekdays are evaluated in. Empty = the module's Default time zone (UTC). Revealed by Show advanced options. |
| Weekdays | IsWithinSchedule | No | Monday,Tuesday,Wednesday,Thursday,Friday | Comma-separated English day names the schedule is active on. Day names are always English regardless of locale. Empty = every day. |
| Start time | IsWithinSchedule | No | 09:00 | Local time the window opens, HH:mm. Default: 09:00. Times use the 24-hour clock (type 17:00, not 5:00 PM). |
| End time | IsWithinSchedule | No | 17:00 | Local 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) | IsWithinSchedule | No | 2026-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}. |
| Start | SLADeadline | Yes | 2026-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 amount | SLADeadline | Yes | 8 | Default: 24. Length of the SLA window, in SLA unit. |
| SLA unit | SLADeadline | Yes | Hours | Default: Hours. Options: Minutes, Hours, Days. |
| Mode | SLADeadline | No | business | Default: 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). |
| Input | Validate | Yes | 25/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) | Validate | No | dd/MM/yyyy | The 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) | Validate | No | Europe/Rome | Zone applied to inputs with no zone indicator. Default: the module's Default time zone (UTC). |
| Locale (optional) | Validate | No | it-IT | Used 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) | Validate | No | 1900-01-01 | Inclusive 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) | Validate | No | {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, SLADeadline | No | 2026-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, SLADeadline | No | Europe/Rome | Applied to zone-less inputs and to local calendar-day decisions. Default: the module's Default time zone (UTC). |
| Weekend days (optional) | IsBusinessDay, SLADeadline | No | Saturday,Sunday | Comma-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, SLADeadline | No | 2026-12-25,2026-01-01 | Dates to treat as non-working days, yyyy-MM-dd, comma- or newline-separated. Empty = module default holiday calendar. |
| Output variable | SLADeadline, Validate | Yes | slaDeadline | Variable 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
- The Task parses the date input(s) the chosen Operation uses, applying Time zone to zone-less values.
- It runs the routing test and, for
SLA deadlineandValidate, writes its variable. - 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.
- Check Date Operation
SLA deadline, Start{ticketCreatedAt}, SLA amount8, SLA unitHours, Modebusiness, output variableslaDeadline. Label the two outgoing Sequence Flows met and breached. metbranch Extract Date OperationFormat text, Input date{slaDeadline}, PatternCustom…, Custom patterndddd d MMMM HH:mm, Time zoneEurope/Rome, Localeit-IT, output variabledueText.- OutputTask (Standard Module) message:
We're on it you'll hear from us by {dueText}. breachedbranch 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.
- Get Date Operation
Current time, Formatiso, output variablenowcaptures the current instant to use as the validity lower bound. - InputTask (Standard Module) asks "When is your appointment?" and stores the reply in
appointmentDate. - Check Date Operation
Validate, Input{appointmentDate}, Localeit-IT, Min date{now}, output variableappointment. Label the outgoing Sequence Flows valid, invalid, and outOfRange. validbranch ScheduleReminder (Scheduler Module) When should it fire?Before another date, Amount24, UnitHours, Reference date variable{appointment}fires a new Session 24 hours before the appointment.- OutputTask (Standard Module) confirms:
Done we'll remind you the day before. invalid/outOfRangebranches OutputTask (Standard Module) repliesThat date doesn't look right please type it again, e.g. 25/12/2026 18:00and 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
tomorroware not supported. - "Unknown time zone '…'." The time zone field contains a value the platform doesn't recognize. Use an IANA id such as
Europe/RomeorAmerica/New_York(Windows ids likeW. Europe Standard Timealso work). Plain abbreviations likeCETorESTdo not. - The result is off by a few hours. Your input had no zone indicator (no
Zor 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
- 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. - 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. - 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.
- 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).
- Use the Now / As of override only for testing. It freezes "now" great for verifying branch logic, wrong in production.
Error codes
| Code | Name | Description |
|---|---|---|
| 3005 | TaskInvalidData | A 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 |