Cron Expression Parser & Next Run Calculator

Paste a crontab schedule to get a plain-English description, the next 10 run times, and a field-by-field breakdown.

Loading tool…

About the Cron Parser

A standard cron expression has five space-separated fields: minute, hour, day of month, month and day of week. */15 9-17 * * 1-5 means every 15 minutes from 09:00 to 17:45, Monday to Friday. Each field accepts a single value, a list (1,15), a range (9-17), a step (*/10 or 0-30/5) and, for months and weekdays, three-letter names such as JAN or MON. Sunday is both 0 and 7. Six-field expressions put seconds first, as used by Quartz, Spring @Scheduled and node-cron.

The description comes from the open-source cronstrue library; the next-run list is calculated by this page's own scheduler, so you can check that the two agree. You choose whether the schedule is evaluated in your local time zone or in UTC — most servers and CI systems such as GitHub Actions and Kubernetes CronJobs default to UTC, which is a common source of jobs running hours early or late. Around daylight-saving changes a local-time job scheduled in the skipped hour does not run.

One rule surprises people: when both day-of-month and day-of-week are restricted, Vixie cron and cronie run the job when either matches, so 0 0 13 * 5 fires on every 13th and on every Friday. The parser follows that rule and also understands L (last day of month), 5L (last Friday) and MON#2 (second Monday). The @hourly, @daily, @weekly, @monthly and @yearly macros are expanded for you.

How to use it

  1. Type or paste a cron expression, or click one of the presets.
  2. Choose whether the schedule runs in your local time zone or in UTC.
  3. Read the plain-English meaning and check the next 10 run times.
  4. Use the Fields table to see exactly which minutes, hours and days each field matches.

Frequently asked questions

What does */5 * * * * mean?
Every 5 minutes: at minute 0, 5, 10 … 55 of every hour, every day. The */n step starts at the lowest allowed value, so */7 in the minute field runs at 0, 7 … 56 and then again at 0 — not strictly every 7 minutes.
Is cron time UTC or local?
Classic crontab uses the server's local time zone (often UTC on cloud machines). GitHub Actions schedules and Kubernetes CronJobs (unless spec.timeZone is set) run in UTC. Toggle “Schedule runs in” to see both.
How do I run a job on the last day of the month?
Use L in the day-of-month field: 0 0 L * *. Plain Vixie cron does not support L; there the usual workaround is 0 0 28-31 * * with a shell test such as [ "$(date -d tomorrow +\%d)" = 01 ].
Why does my expression have 6 fields?
Quartz, Spring and several Node.js libraries add a seconds field at the start. 0 0 12 * * * in those systems means every day at 12:00:00. Standard crontab does not accept a seconds field.

Related tools