Cron Explainer
See what a cron expression means in plain English and exactly when it will run, in any time zone.
- Never uploaded
- Works offline
- Free, no sign-up
Processed on this device. Nothing is sent to a server.
How to use the Cron Explainer
- Step 1Enter an expressionOr pick a common schedule to start from.
- Step 2Choose a time zoneRun times account for daylight-saving changes.
- Step 3Check the scheduleThe next 10 runs and a week-long heat map.
How cron expressions work
A standard cron expression has five fields separated by spaces: minute (0–59), hour (0–23), day of the month (1–31), month (1–12) and day of the week (0–7, where both 0 and 7 mean Sunday). An asterisk means “every”. Commas list values (1,15), hyphens make ranges (9-17), and a slash sets a step (*/15 means every 15).
One rule surprises people: when both day-of-month and day-of-week are set, classic cron runs when either one matches. So 0 0 1 * 1 runs on the 1st of every month and also every Monday. This tool follows that rule, as Linux cron, Kubernetes CronJobs and GitHub Actions do.
Six-field expressions with seconds first (used by Quartz, Spring and many Node.js schedulers) work too, as do shortcuts like @daily and @hourly, and the extensions L (last), W (nearest weekday) and # (nth weekday of the month).
Questions
Which time zone does cron use?
The time zone of the machine or service running it. Linux cron uses the server’s local time, GitHub Actions and most cloud schedulers use UTC, and Kubernetes CronJobs use the controller’s time zone unless spec.timeZone is set. Pick the matching zone here to see the real run times.
What happens during daylight-saving changes?
Run times here are calculated in the time zone you choose, so a 09:00 job stays at 09:00 local time and moves by an hour in UTC. Jobs scheduled inside the skipped or repeated hour (often 01:00–03:00) may run once, twice or not at all, depending on the cron implementation.
How do I run a job every 90 minutes?
Cron can’t express that in one line because 90 doesn’t divide an hour. Use two entries, 0 0-21/3 * * * and 30 1-22/3 * * *, or schedule every 30 minutes and skip runs in the job itself.
Why is my expression rejected?
Check the number of fields (5, or 6 with seconds) and the ranges: minutes 0–59, hours 0–23, days 1–31, months 1–12, weekdays 0–7. Names like MON or JAN work; words like “weekday” don’t.