Cron Expression Parser

Paste a cron expression and get a plain-English explanation plus a preview of its next 5 run times.

Standard 5-field format: minute hour day-of-month month day-of-week.

The 5 fields

Minute, hour, day-of-month, month, day-of-week.

* means "every value." */5 means "every 5 units." 1-5 is a range. 1,3,5 is a list. Day-of-week runs 0 (Sunday) through 6 (Saturday).

A quick example

*/15 9-17 * * 1-5 means "every 15 minutes, between 9 AM and 5 PM, Monday through Friday." Try the presets dropdown for more common schedules.

How it works

The parser splits your expression into its 5 fields and expands each one into an explicit set of allowed values: */15 in the minute field becomes the set {0, 15, 30, 45}, 1-5 in day-of-week becomes {1, 2, 3, 4, 5}, and lists like 1,3,5 are unioned together. Every value is range-checked as it's expanded, which is why a typo like 61 * * * * fails immediately with a message naming the exact field and the range it expected, instead of silently producing a schedule that never fires.

The "next 5 runs" list is computed by brute force, and that's a feature: starting from the next whole minute, the code steps forward one minute at a time (up to a year, about 527,000 checks, which takes a few milliseconds) and tests each candidate minute against the expanded sets. A useful side effect of simulating instead of calculating: expressions that are syntactically valid but can never fire, like 0 0 30 2 * (February 30th), aren't an error, they just come back with "no matching run found in the next year". If you see that message, your expression parses fine but describes a date that doesn't exist or is more than a year away.

All date math uses the browser's Date object in your local time zone, and it all runs in this page's JavaScript. Check DevTools' Network tab: no request is made when you type an expression, so nothing about your infrastructure's schedules leaves your machine.

Common questions

What cron format does this use?

The standard 5-field Unix cron format: minute (0-59), hour (0-23), day-of-month (1-31), month (1-12), and day-of-week (0-6, where 0 is Sunday). Some systems add a seconds field or use 7 for Sunday, this tool follows the common 5-field convention.

What happens if both day-of-month and day-of-week are set?

Standard cron semantics: if both fields are restricted (not *), the schedule matches when EITHER condition is true, not both. This trips a lot of people up, it's the same behavior as real crontab.

What time zone are the next-run times in?

Your browser's local time zone. If the job actually runs on a server in a different time zone, the real run times will differ.