Cron Expression Explainer

Runs in browser Utilities

Paste a 5-field (Unix/Cloudflare/Kubernetes) or 6-field (with seconds) cron expression and get a human-readable description plus the next scheduled runs in your timezone.

Privacy: This tool runs entirely in your browser. Your input never leaves your device.
Loading tool…

How to use Cron Expression Explainer

  1. Paste the cron expression.
  2. Choose the timezone and how many upcoming runs to list.
  3. Read the explanation, fields and run table.

Cron Expression Explainer features

  • crontab.guru-style English description
  • 5-field and 6-field (seconds) formats, names, ranges, lists, steps, @shortcuts and L / W / #
  • Next runs (up to 100) in any IANA timezone with DST handling
  • Field-by-field table with the resolved values
  • Warnings for expressions that never fire or that mix day-of-month and day-of-week
  • Average interval between runs

Cron Expression Explainer example

Explain a maintenance window

Input:

30 2 * * 6

Output:

At 02:30 on Saturday.
Next: 2024-03-16T02:30:00+03:00, 2024-03-23T02:30:00+03:00, …

Frequently asked questions about Cron Expression Explainer

Which syntax is supported?

Numbers, names (MON, JAN), ranges (1-5, MON-FRI, wrap-around FRI-MON), lists, steps (*/15, 1-30/5), the shortcuts @hourly @daily @weekly @monthly @yearly @reboot, and the Quartz extensions L, W and # (last day, nearest weekday, nth weekday).

How is the day-of-month / day-of-week conflict resolved?

As in Vixie cron and most schedulers: when both fields are restricted the job runs when either matches (OR). The tool shows a warning when this applies so you can double-check the intent.

How far ahead are runs computed?

Up to 100 runs within the next eight years. If nothing fires in that window — for example 31 February — the tool reports that the expression never fires.

Is the seconds field detected automatically?

Yes. Six space-separated fields are read as seconds first; five fields as the classic format.

Technical notes

Each field expands into an explicit value set (parseCron): day-of-week 7 folds to 0 and ranges may wrap (FRI-MON → 5, 6, 0, 1), '?' means '*' in the two day fields, and a bare-start step (5/15) means 5, 20, 35, 50. Quartz's L, W and # are honoured when scheduling — 1W on a Saturday moves to Monday the 3rd, never into the previous month — but Quartz's seventh year field is rejected.

Upcoming runs come from advancing a wall-clock cursor (month, day, hour, minute, second) in the selected IANA zone (nextRuns) for at most eight years or 2,000,000 steps, converting each match with zonedToUtc and checking the round-trip through Intl.DateTimeFormat. A time missing on a spring-forward night is dropped; a time occurring twice at fall-back fires once, at its first occurrence. Warnings (impossible day/month pairs, 29 February, day-of-month/day-of-week OR) are the parser's, not the scan's.