# Cron Expression

> Validate, explain, build and preview the next runs of a cron expression — with timezone and DST handling, locally in your browser.

Canonical: https://host-tools.com/tools/cron-expression/

---

## What does this tool do?

Cron Expression has two modes. **Explain** validates a cron schedule, explains
it in plain English and shows the next executions as real dates in your
timezone. **Build** constructs an expression from common frequencies — every N
minutes, daily, weekly and so on — and immediately explains it and lists the
next runs. Everything is computed locally in your browser.

## The five (and six) fields

A classic cron expression has five fields:

| Field | Values |
|---|---|
| minute | 0–59 |
| hour | 0–23 |
| day of month | 1–31 |
| month | 1–12 |
| day of week | 0–6 (0 = Sunday) |

A six-field expression prepends **seconds** (0–59). This tool accepts exactly
five or six fields. A seventh (year) field is not supported, and neither is
`@reboot`, because it has no regular schedule.

## Field syntax

- `*` means every value.
- `*/5` means every fifth value (a step).
- `1-5` is a range.
- `1,3,5` is a list.
- `1-5/2` combines a range and a step.

## Day of month and day of week

When both day-of-month and day-of-week are restricted, this tool follows the
standard (Vixie) semantics and treats them as an **OR**: the expression fires on
either match. `0 0 1 * 0` runs at midnight on the 1st of the month *and* every
Sunday.

## Extensions: L, W, # and ?

Beyond classic cron, this tool supports common extensions:

- `L` — the last day of the month.
- `W` — the nearest weekday to a given day.
- `#` — the nth weekday of a month (`5#3` = third Friday).
- `?` — "no specific value", treated as `*` for that field.

These are extensions, not part of plain POSIX cron. They are supported
consistently here and explained in the result.

## Aliases

`@yearly`, `@annually`, `@monthly`, `@weekly`, `@daily`, `@midnight` and
`@hourly` are accepted shortcuts. `@reboot` is not, because it does not
represent a regular schedule.

## Build mode

If you do not know cron syntax, switch to **Build**. It generates an expression
from common schedules:

- Every minute
- Every N minutes
- Hourly
- Daily
- Weekly (pick the weekdays)
- Monthly (pick the day of the month)
- Yearly (pick the month and day)

Each change updates the expression, its explanation and the next runs
immediately. The builder covers these common patterns only — it is not a way to
represent every possible cron expression. For anything beyond them, switch to
Explain and type the expression directly.

## Timezone and DST

Runs are shown in a real IANA timezone (your browser timezone by default, or
any you choose). Daylight saving transitions are handled correctly: a time that
does not exist on a spring-forward day is shifted forward, and a time that
occurs twice on a fall-back day is reported once.

## Examples

- `*/5 * * * *` — every five minutes.
- `0 9 * * 1-5` — at 09:00, Monday through Friday.
- `0 0 1 * *` — at midnight on the first day of each month.
- `30 14 15 6 *` — at 14:30 on June 15.
- `0 0 L * *` — at midnight on the last day of each month.

## Privacy

Your expression is validated and expanded locally. Nothing is uploaded or sent
anywhere.
