⌛
Time Until
clock.untilThe ClocktowerTimeCounts the time between now and a moment. Ahead if it's still to come, Passed if it's gone. You get whole {{until.days}}, {{until.hours}}, {{until.minutes}} and {{until.seconds}}, words like “3 days, 4 hours and 2 minutes”, and {{until.relative}}, Discord's live countdown.
When to use this
- →Unix seconds, milliseconds and ISO dates all work — so does {{timestamp}}
On the canvas
This is what Time Until looks like when you place it on your flow. Each field below is something you configure in the inspector panel.
⌛Time
Time Until
clock.untiltimerequired
e.g. 2026-12-25T00:00:00Z or {{row.ends_at}}
asrequired
until
ahead
passed
invalid
Config fields
| Field | Type | Req | What it does |
|---|---|---|---|
timee.g. 2026-12-25T00:00:00Z or {{row.ends_at}} | text | yes | Until when 📅 |
asuntil | text | yes | Save it as ✨ |
Sparks this piece adds
After this piece runs, these values are available as sparks in every node downstream.
{{until.days}}numberWhole days{{until.hours}}numberWhole hours, in total{{until.minutes}}numberWhole minutes, in total{{until.seconds}}numberSeconds, in total{{until.text}}stringIn words: 3 days, 4 hours and 2 minutes{{until.short}}stringShort: 3d 4h{{until.relative}}stringA live Discord countdown{{until.at}}numberThe moment, as a Unix timeOutput ports
aheadStill to come
passedAlready happened — the numbers count the time since
invalidThat wasn't a time
📐
In TypeScript, this would be…
Not something you need to write — just a look at what Kitcord does for you.
TypeScript
const gap = Date.parse("2026-12-25T00:00:00Z") - Date.now();
const days = Math.floor(Math.abs(gap) / 86_400_000); // {{until.days}}
// gap > 0 → Ahead ⏩ ; otherwise Passed ⏪