Skip to main content

Visualize cron job schedules.

minute hour day month day-of-week
every minute
Next runs
9/6/2026, 1:27:00 PM
9/6/2026, 1:28:00 PM
9/6/2026, 1:29:00 PM
9/6/2026, 1:30:00 PM
9/6/2026, 1:31:00 PM
All calculations performed locally in your browser. No data sent to server.

Results are for informational purposes. Verify results with other sources.

Reading a cron expression

A cron expression is five fields separated by spaces, read left to right as minute, hour, day of month, month, day of week. Almost every cron mistake is either a field in the wrong position or a misunderstanding of how the two day fields interact.

How it works

  • Parses the five fields and describes each in words, then lists the next scheduled run times.
  • Handles the standard operators: * for every value, */n for every nth, a-b for ranges, and a,b,c for lists.
  • Interprets the expression in your browser's time zone, which is not necessarily the one your server uses.
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ minute       (0โ€“59)
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€ hour         (0โ€“23)
โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€ day of month (1โ€“31)
โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€ month        (1โ€“12)
โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€ day of week  (0โ€“6, Sunday = 0)
โ”‚ โ”‚ โ”‚ โ”‚ โ”‚
* * * * *

Worked example

Decoding 30 2 * * 1-5 โ€” a schedule that trips people up because of the two day fields.

  1. minute = 30
  2. hour = 2
  3. day of month = * (every day)
  4. month = * (every month)
  5. day of week = 1-5 (Monday to Friday)

Runs at 02:30 every weekday. Note that day-of-month is * here โ€” had it been a specific number, cron would run when either day field matched, not both, which is the single most common cron surprise.

Reading the result

  • When both day-of-month and day-of-week are restricted, cron uses OR, not AND. 0 0 1 * 1 runs on the 1st of the month AND every Monday, not only on Mondays that fall on the 1st.
  • Cron uses the server's time zone unless configured otherwise, and most crontabs do not handle daylight saving gracefully. A job scheduled for 02:30 may run twice or not at all on clock-change nights.
  • There is no 'every 90 minutes'. Step values divide the field, so */90 in the minute field is invalid; express it as two entries or move the interval logic into the job.
  • Some implementations add a sixth seconds field at the front, and Quartz uses seven with a year. Confirm which dialect your scheduler speaks before copying an expression from elsewhere.

Common questions

Why does my job run more often than expected?
Usually the day-of-month / day-of-week OR behaviour, or a step value applied to the wrong field. Reading the expression back in words, as this tool does, catches both quickly.
How do I schedule something on the last day of the month?
Standard cron cannot express it. The usual workaround is to run daily and have the job exit immediately unless tomorrow is the 1st. Some dialects add an L character for this.