Skip to content
Tools

Cron expression explainer

Five fields decide when your job runs, and getting one wrong is the kind of mistake nobody notices for a month. Read any expression in English and check its next five runs before you commit it.

Runs in your browser. Nothing is sent anywhere.

Try

*/15

minute

*

hour

*

day of month

*

month

*

day of week

In English

Runs at minute 0, 15, 30, 45 of every hour, every day.

Next five runs, your local time

  1. 01Sat, Sep 19, 2026, 05:15 PM
  2. 02Sat, Sep 19, 2026, 05:30 PM
  3. 03Sat, Sep 19, 2026, 05:45 PM
  4. 04Sat, Sep 19, 2026, 06:00 PM
  5. 05Sat, Sep 19, 2026, 06:15 PM

The part worth repeating

Runs at minute 0, 15, 30, 45 of every hour, every day.

*/15 * * * * in plain English. Cron reads five fields and almost nobody reads them the same way twice, which is why an expression that looks obvious is worth checking before it ships.

Post this

Times are local, so the card carries the expression and what it means rather than dates.

The trap worth knowing is the day fields. When day of month and day of week are both restricted, cron runs when either one matches, not when both do. So 0 0 1 * mon is not the first Monday of the month. It is the first of the month, plus every Monday, which is roughly five times more often than the person writing it intended. This page warns you when you are in that case.

The second trap is that cron runs in the timezone of whatever is running it, which is very often UTC on a server and rarely the timezone you were thinking in. Times shown here are your local browser time, so check what your scheduler is actually set to before trusting them.

The third is that cron will happily start a second run while the first is still going. If a job can overrun its interval, either make it refuse to start twice or make it safe to run twice. That second property is idempotency, and it is the more durable answer.

Questions people arrive with

Why does my cron job run more often than I expected?
Almost always the day-of-month and day-of-week trap. When both fields are restricted, cron runs when either matches rather than both. So 0 0 1 * mon fires on the first of the month and on every Monday, not on Mondays that fall on the first. Paste the expression above and it warns you when an expression has this shape.
What does 0 0 * * * mean in cron?
Minute 0 of hour 0, every day of the month, every month, every day of the week. Midnight daily. The five fields are minute, hour, day of month, month, and day of week, in that order, and the explainer above reads any expression back in English with its next five runs.
How do I check a cron expression is right before deploying it?
Read it in plain English and look at the next few times it actually fires. A schedule that looks right and a schedule that is right differ most often around month ends, day-of-week overlap, and the difference between */15 and 15. The tool above shows both the description and the next five runs in your own timezone.