# Date

> Format a date for people to read, shift it, pull out a part of it, measure the gap between two, or round it.

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.

> Dock: Data · Change · Takes: a date · Returns: a date or a number

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](/build/core-concepts/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](/build/action-steps/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](/build/action-steps/conditions) 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](/build/action-steps/conditions) 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](/build/action-steps/conditions).
- See what `{{ $now }}` and `{{ $today }}` give you in [Variable Syntax](/reference/variable-syntax).
