RunTheTests
/

Cron Expression Parser

Read a cron expression in plain English and see when it next runs.

What you provide

Five fields: minute, hour, day of month, month, day of week. Shorthands like @daily work too.

Result

PASS

At every 15 minutes past hours 9 through 17, on days Monday through Friday

Every field is unambiguous, and the next runs above are in the timezone of this browser. That matters because a crontab follows the clock of the machine that holds it, including its daylight-saving changes. A job set for 01:30 runs twice on one night a year and not at all on another, which is why anything sensitive to exactly-once execution is better scheduled in UTC or given a lock.

Diagnostic telemetry
Expression
*/15 9-17 * * 1-5
In English
At every 15 minutes past hours 9 through 17, on days Monday through Friday
Runs per dayOn a day the day and month fields match
36
Day fields
unambiguous
Next run
9/3/2026, 10:15:00 AM
Then
9/3/2026, 10:30:00 AM
Then
9/3/2026, 10:45:00 AM
Then
9/3/2026, 11:00:00 AM
Then
9/3/2026, 11:15:00 AM

What this cannot tell you

  • Parses the expression you type, in your browser. It does not read any crontab or connect to a server.
  • Next run times are shown in this browser timezone. A real job follows the clock of the machine holding the crontab, which is frequently a different one.

Take this with you

How this calculation works

Each of the five fields is expanded into the set of values it matches, then the parser walks forward minute by minute to find the next times every field is satisfied at once. Walking is deliberate rather than lazy: cron treats the two day fields as OR when both are restricted, and every closed-form shortcut has to special-case that anyway. The scan is bounded to four years, so an expression that can never fire reports as much instead of hanging.

What the results mean

In English
The schedule described in words. Reading this back is the quickest way to catch a field in the wrong position, which is the most common cron mistake after the day trap.
Day fields
Flagged when both day of month and day of week are restricted, because cron then runs when either matches rather than both.
Runs per day
How many times the job fires on a day the date fields allow. Useful for spotting an expression that runs far more often than intended.

Common problems and fixes

The job runs far more often than expected
Check for a step in the wrong field. Writing */5 in the hour position means every five hours, while the same thing in the minute position means twelve times an hour. Also check for a bare number where you meant a step: 5 in the minute field means five past every hour, which is 24 runs a day rather than one.
A job scheduled for the 1st and for Mondays runs on both
That is cron behaving to specification, and it surprises almost everyone. When day of month and day of week are both restricted, the job runs when either matches, not when both do. To get the intersection, restrict only the day of month and have the script itself check the weekday before doing anything.

Frequently asked questions

What does */5 mean?

Every fifth value of that field, starting from the lowest. In the minute field it means minutes 0, 5, 10 and so on. The step applies to the whole range unless you narrow it first, so 9-17/2 in the hour field means every second hour between 9 and 17.

What happens during a daylight saving change?

A job scheduled inside the hour that repeats runs twice, and one inside the hour that does not exist is skipped. Some cron implementations compensate and many do not. The reliable fix is to run the machine in UTC, or to schedule outside the 01:00 to 03:00 window where these changes happen.

Why does my expression have six fields?

Several schedulers, including Quartz and Spring, add a leading seconds field. Standard Unix cron has five. If you paste a six-field expression here, drop the first field to read the schedule, and be careful not to move a six-field expression into a system expecting five.

Put this on your own site

Free to embed, no attribution required beyond the source link the frame carries itself. It runs entirely in your visitor's browser, sets no cookies and loads no third-party script.

Embed code
<iframe src="https://runthetests.com/embed/cron-parser/" width="100%" height="560" style="border:1px solid #e5e5e5;border-radius:8px" title="Cron Expression Parser" loading="lazy"></iframe>

Preview it at https://runthetests.com/embed/cron-parser/. Embedded pages are marked noindex, so yours stays the canonical copy — not this one.

More in Time