Calcoid
Tech

Cron Expression Calculator

Parse any 5-field cron expression into a human-readable schedule. See the matching minutes, hours, and days, plus the next 5 run times in UTC.

Parse a cron expression

Five fields separated by spaces: minute hour day-of-month month day-of-week. Use * for any value, */n for every n, 1-5 for a range, 1,5,10 for a list.

Next runs are computed forward from this moment. Defaults to 2026-01-01 UTC so results stay deterministic.

Presets

Result

Human readable

At 09:00 on Monday, Tuesday, Wednesday, Thursday, and Friday.

Frequency class: Weekly

Field breakdown

FieldRawMatches
Minute00
Hour99
Day of month*31 values: 1, 2, 3, 4, 5, 6, ..., 31
Month*1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Day of week1-51, 2, 3, 4, 5

Next 5 runs (UTC)

#DateTimeISO 8601
12026-01-0109:002026-01-01T09:00:00.000Z
22026-01-0209:002026-01-02T09:00:00.000Z
32026-01-0509:002026-01-05T09:00:00.000Z
42026-01-0609:002026-01-06T09:00:00.000Z
52026-01-0709:002026-01-07T09:00:00.000Z

Frequently Asked Questions about the Cron Expression Calculator

What is the 5-field cron syntax?
A standard Unix cron expression has exactly 5 fields separated by spaces: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-6, where 0 is Sunday). Each field accepts an integer (5), a list (1,5,10), a range (1-5), a step (*/15), or the wildcard *. The expression 0 9 * * 1-5 means "at 09:00 on weekdays". The 5-field form is what Linux crontab, Vercel Cron, GitHub Actions, AWS EventBridge, and Kubernetes CronJob all use; the 6 and 7-field variants add seconds and year on top and are non-standard.
What is the difference between */15 and 0-30/5?
Both use the slash for stepping, but the base before the slash sets the range to walk. */15 in the minute field means "every 15 minutes across the full 0-59 range", producing 0, 15, 30, 45. 0-30/5 means "every 5 minutes from 0 to 30", producing 0, 5, 10, 15, 20, 25, 30. You can also write a single starting value, like 5/15, which means "starting at 5, step 15 up to the maximum" and produces 5, 20, 35, 50. The step itself must always be a positive integer.
Can I use month and day names instead of numbers?
Yes. The month field accepts JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC. The day-of-week field accepts SUN, MON, TUE, WED, THU, FRI, SAT. Names are case-insensitive (jan and JAN both work) and can be combined with ranges, so MON-FRI is the most readable way to write weekdays. Names cannot be used inside steps (MON/2 is not valid), so for stepped weekday schedules stick to numeric form like 1-5/2.
What happens if I restrict both day of month and day of week?
Vixie cron (the implementation Linux, macOS, and almost every cloud scheduler use) treats the two day fields as a logical OR when both are restricted: a run fires when EITHER field matches. So 0 0 1 * 0 fires at midnight on the 1st of every month AND on every Sunday. If only one of the two fields is the wildcard *, only the restricted field controls the day. This is documented in crontab(5) and is what this calculator implements. The Quartz scheduler used by some Java systems takes the opposite (AND) view, so double-check the docs of the engine you target.
Why is Sunday both 0 and 7?
Historical compatibility. The original AT&T cron used 0-6 with Sunday as 0, while later Vixie cron added 7 as an alias for Sunday so users coming from systems that index weekdays 1-7 (with Sunday at 7) would not be surprised. Internally both values resolve to the same day, so 0 0 * * 0, 0 0 * * 7, and 0 0 * * SUN are identical schedules. The calculator collapses 7 to 0 in its output so you do not see both numbers in the matches list.