Skip to content

Dates and times

A date, time, or date-time starts with @ and uses ISO order: year, month, day. Other date spellings are not recognised.

@2026-05-27
@14:30
@2026-05-27T14:30
@2026-05-27T12:00Z

at joins a date and a time. in attaches a time zone. to shows the same moment in another zone.

@2026-06-26 at @17:00
@2026-06-26 at @17:00 in Europe/London
@2026-06-26 at @17:00 in Europe/London to America/New_York
@2026-06-26 at @17:00 in Europe/London to Asia/Tokyo

now, today, tomorrow, and yesterday come from the clock. A bare time such as @14:30 means today at that time.

now
today
tomorrow

Add or subtract a duration. Whole months and years move by the calendar, clamping to the end of a short month.

@2026-05-27 + 1 day
@2026-06-26 + 3 weeks
@2026-01-31 + 1 month
@2028-01-31 + 1 month

The difference of two dates is a duration. Ask for the units you want.

@2026-12-25 - @2026-06-26
@2026-12-25 - today to days
today - @1969-07-20 to years, days to 0 dp

The words ago, hence, before, and after read like English.

3 days ago
2 weeks hence
2 days before @2026-06-22
2 hours after @09:00

Dates compare with the usual operators.

@2026-06-22 < @2026-06-23

date, time, and timezone take an instant apart.

date(now)
time(now)
timezone(@2026-06-26 at @17:00 in Europe/Berlin)

default timezone: gives every zoneless date-time in the document a zone. smoot resolves daylight saving per zone and per date, so the same meeting can land at a different hour abroad in the weeks when only one side has changed its clocks.

default timezone: Europe/Berlin
sync = @2026-05-04T16:00
sync to America/New_York
autumn = @2026-10-28T16:00
autumn to America/New_York

Zones can be IANA names (Europe/Berlin), fixed offsets (UTC+4, UTC-05:30), or UTC. A zone is a value: tz = Europe/Paris then now to tz.