Cron Expression Explainer

Decode cron schedules into plain English. Enter a five-field cron expression and see exactly when it fires, with a reference table of the patterns you'll reach for most.

minute hour day-of-month month day-of-week
Result

How to use this calculator

  1. Enter a five-field cron expression: minute, hour, day-of-month, month, day-of-week.
  2. Press Explain for a plain-English reading and a field-by-field breakdown.
  3. Use * for "every", ranges like 1-5, lists like 1,3,5, or steps like */15.

Formula used

minute · hour · day-of-month · month · day-of-week

Fields range: minute 0–59, hour 0–23, day-of-month 1–31, month 1–12, day-of-week 0–6 (Sunday=0). An asterisk means "every". A gotcha: setting both day-of-month and day-of-week makes the job run when either matches, not both.

Example calculation

Worked example

0 9 * * 1-5 = at 09:00, Monday to Friday — a classic weekday-morning job.

More: */15 * * * * every 15 minutes · 0 0 * * 0 midnight every Sunday · 0 0 1 * * midnight on the 1st of each month.

Reading cron without the guesswork

Cron is the Unix scheduler behind backups, reports, cleanups and countless automated tasks — but its terse five-field syntax is famously easy to misread, and a wrong expression silently runs at the wrong time (or never). Translating to plain English before deploying catches those mistakes.

The classic trap: when you specify both a day-of-month and a day-of-week, cron runs the job whenever either matches — so 0 0 13 * 5 fires on the 13th AND every Friday, not only Friday the 13th. Steps (*/15), ranges (9-17) and lists (1,3,5) combine to express almost any schedule once the fields are clear.

Why use this calculator?

Frequently asked questions

What are the five cron fields?

In order: minute (0–59), hour (0–23), day of month (1–31), month (1–12), day of week (0–6, Sunday=0). Each accepts *, single values, ranges (1-5), lists (1,3,5) or steps (*/15).

How do I run a job every 15 minutes?

Use */15 in the minute field: */15 * * * *. The */n step syntax means 'every n units', so */15 fires at :00, :15, :30 and :45 of every hour.

Why did my job run on an unexpected day?

Likely the day-of-month/day-of-week OR rule: when both are set to non-*, cron runs when either matches. To target 'Friday the 13th', you can't do it in one standard expression — you'd check the date inside the script instead.

Related calculators