Date
The Date step does one thing to a date and hands back the answer. Format it for a person, shift it, pull out one part, measure the gap between two dates, round it, or take the current date.
Dates are unavoidable in operations work: invoice due dates, SLA windows, “anything older than 30 days”. This step handles them without a trip to the Code editor.
Format or shift dates directly inside fields: You can format, shift, or snap dates directly within any variable reference using Data Transformation:
- Format for reading:
{{ 1.created_at | format_date:date_medium:Europe/Prague }} - Add 30 days:
{{ 1.invoice_date | date_add:30:days }} - Start of month:
{{ 1.timestamp | date_start_of:month }}
Use the dedicated Date canvas step when you need to calculate gaps between dates (Between) for downstream Conditions or when multiple steps reuse the computed date.
Setting it up
Add the step
Open Tools in the dock and choose Date.
Pick what to do
What to do decides which of the other fields appear:
| Operation | What it does |
|---|---|
| Format | Renders a date as display text |
| Add | Moves a date forwards |
| Subtract | Moves a date backwards |
| Extract | Pulls out one part: the year, month, weekday… |
| Between | Measures the gap between two dates |
| Round | Snaps to a whole day, hour, month… |
| Now | Takes the current date and time |
Give it the date
Date takes what you are working with, usually a reference such as {{ 1.created_at }}. Write it out as 2026-08-03, 2026-08-03 14:22 or 2026-08-03T14:22:00Z, or use {{ $now }}.
Between also needs Second date.
Fill in the rest
Add and Subtract take How much and a Unit: years through seconds.
Extract takes Part to extract: year, quarter, month as a number or a name, week of the year, day of the month, day of the year, day of the week as a number or a name, hour, minute or second.
Between takes Measure in. The gap is counted in whole units, so 36 hours measured in days answers 1.
Round takes Round to (year, month, week, day, hour or minute) plus a Direction. Down goes back to the start of the unit; up goes forward to the next boundary. A date already sitting on a boundary is left alone either way, and weeks start on Monday.
Choose a format and timezone
Format offers ISO (2026-08-03), day-first (03/08/2026), month-first (08/03/2026), long date (3 August 2026), date and time (2026-08-03 14:22), long date and time (3 August 2026 at 14:22), or Custom.
Custom takes a pattern built from these tokens: YYYY YY for the year, MMMM MMM MM M for the month, DD D for the day, dddd ddd for the weekday, HH H hh h for the hour, mm m for minutes, ss s for seconds, and A a for am/pm. Anything in [square brackets] is written out as-is, so [Due] DD MMM gives Due 03 Aug.
Timezone matters whenever a date crosses midnight for somebody. Set it to the timezone the reader is in, not the one the server is in.
If the incoming date is in an unusual shape, use Input format to say
how to read it. Without it, Glow makes a sensible guess, which is right for
ISO dates and ambiguous for things like 03/04/2026.
What it passes on
Two keys mean the same thing on every operation, so learn them once:
| Reference | What it holds |
|---|---|
{{ N.date }} | The machine-readable instant, for another step |
{{ N.formatted }} | The display text, for a person to read |
Use formatted in a message and date when another step needs to work with it.
{{ N.result }} is the operation’s primary answer, and what kind of thing it is depends on the operation: an instant from Format, a number from Extract or Between. {{ N.resultType }} names that kind (date, text or number), so one look tells you what you are about to reference.
Extract and Between have no instant to give, so date and formatted are absent on those two rather than holding something misleading. A reference to a key that is not there fails visibly instead of returning a plausible wrong value.
| Operation | result is | date and formatted |
|---|---|---|
| Format, Add, Subtract, Round, Now | an instant | present |
| Extract | a number | absent |
| Between | a number | absent |
The step also publishes the operation and timezone it used, so a stored run can be read back later without opening the panel.
Examples to copy
A due date thirty days out
What to do: Add · Date: {{ 1.invoice_date }} · How much: 30 · Unit: days.
Put {{ N.formatted }} in the email and {{ N.date }} wherever another step needs the date itself.
How old is this ticket?
What to do: Between · Date: {{ 2.created_at }} · Second date: {{ $now }} · Measure in: days.
Follow it with a Condition on {{ N.result }} to escalate anything past your SLA.
Only run on weekdays
What to do: Extract · Part to extract: Day of the week (number).
Days are numbered the international way: Monday is 1 and Sunday is 7. A Condition on {{ N.result }} set to is less than 6 therefore runs on weekdays only.
The start of this month
What to do: Round · Round to: month · Direction: down.
Useful as the “from” date of a monthly report.
What’s Next?
- Branch on the answer with Conditions.
- See what
{{ $now }}and{{ $today }}give you in Variable Syntax.