Cron Expression Parser with Next-Run Preview

Five fields in, the reading of each field and the upcoming runs out: everything is parsed in the page, the next 12 matches are shown in your browser's time zone, and no job is registered. Where cron implementations disagree, the page marks it rather than hiding it.

Runs locally in your browser
Cron schedule

Standard five-field crontab syntax: wildcards, lists, ranges, steps, month and day names, and the @hourly to @yearly shortcuts. A step without a range is previewed but flagged, because Debian and Red Hat cron reject it. Nothing is executed or registered.

Field explanation
  • Enter an expression to see a field-by-field explanation.

Next occurrences
  • Preview the next scheduled run times after validating an expression.

Read cron timing before it runs in production

Use the preview to catch range, step, and weekday mistakes. When both day-of-month and day-of-week are restricted, the preview follows common crontab OR semantics.

How to check a cron expression before it runs

A five-field cron expression is split into minute, hour, day of month, month and day of week, and the page prints the next times it matches on the clock of your own device. The parse, the explanation and the preview all happen in the page: no job is registered anywhere and nothing is executed.

The parser reads what a crontab actually accepts: wildcards, lists, ranges, steps, month and weekday names, and the @hourly to @yearly shortcuts. Where cron implementations disagree about a form, the page shows its reading and marks the disagreement instead of guessing.

  1. Type or paste the expression into the field at the top; Load example fills in */15 9-17 * * MON-FRI.
  2. Change Preview from if the schedule should be counted from another moment; the field starts with the current local time.
  3. Press Explain & preview: each field is listed with its raw value and a plain-language reading.
  4. Read the occurrence list; the DAY RULE and NON-STANDARD notes under the fields explain anything that depends on the cron implementation.

What the preview proves, and what it does not

How the five fields are read

The order is fixed: minute (0-59), hour (0-23), day of month (1-31), month (1-12 or JAN-DEC) and day of week (0-7 or SUN-SAT, where 0 and 7 both mean Sunday). Each field takes a wildcard, a list, a range or a step, and the parser ignores case and extra spaces: mon-fri and MON-FRI are the same field.

An item inside a list may itself be a range or a step. 1-5,7 in the minute field reads as minutes 1 through 5 and minute 7, and */10,20 as every tenth minute plus minute 20. Reversed ranges are rejected by name: 0 0 * * FRI-MON reports that the range start is greater than its end. Quartz tokens such as ?, L and # belong to a different syntax and get the five-field hint instead.

A simulated schedule, not a scheduler

The occurrence list is a simulation on your device clock: the page steps forward minute by minute and stops at the first 12 matches inside a four-year window. It proves that the expression is readable and which moments it selects; it cannot prove that the machine running the job shares this time zone, runs this cron implementation, or has the job installed at all.

When day of month and day of week are both restricted, the page follows the common crontab rule and runs when either field matches: 0 0 13 * FRI also fires on 13 October 2026, a Tuesday. The DAY RULE note marks that reading, because it is the most common source of surprises in a crontab.

Shortcuts, and the step form implementations disagree about

@hourly, @daily, @midnight, @weekly, @monthly, @yearly and @annually are expanded into the five fields they stand for, so the explanation and the preview match the long form exactly. @reboot has no schedule to preview and says so instead of printing an empty list.

A step without a range, such as 5/15, is read as from 5, every 15 and previewed, but Debian's Vixie cron and Red Hat's cronie reject that form. The page marks it NON-STANDARD and prints the rewrite 5-59/15, which means from 5 through 59 every 15 minutes and is accepted everywhere. Steps written against a range or a wildcard need no note.

Time zone, daylight saving and the four-year window

Occurrences are read as wall-clock times in the browser's time zone, and that zone is printed under the field list. This matters on the days clocks move: 30 2 * * * in New York has no run on Sunday 14 March 2027, because 02:00 jumps straight to 03:00 and 02:30 never arrives. Set Preview from to look past such a day.

The search covers four years from the preview start and stops after 12 matches, which is enough for a leap-day rule tied to a weekday: 0 0 29 2 1 fills the list. A combination that can never occur, such as 30 2 30 2 *, is answered with a window that has no match rather than with an invented time, and a yearly run such as 0 0 1 1 * shows its four occurrences.

Recent tools: