Cron syntax
Five fields, separated by spaces: minute hour day-of-month month day-of-week.
| Field | Values |
|---|---|
| minute | 0-59 |
| hour | 0-23 |
| day of month | 1-31 |
| month | 1-12 or JAN-DEC |
| day of week | 0-7 (0 and 7 are Sunday) or SUN-SAT |
Each field takes * (any), a list 1,15, a range 9-17 or a step */10 / 0-30/5. The macros @hourly, @daily, @weekly, @monthly and @yearly are also accepted.
The day-of-month / day-of-week trap
When both day fields are restricted, standard (Vixie) cron runs when either matches. 0 12 1 * 1 runs on the 1st of the month and on every Monday, not only on Mondays that fall on the 1st. The explanation above spells this out.
Time zones
Classic crontab uses the server's time zone. GitHub Actions schedules and Cloudflare Cron Triggers always run in UTC, so switch the next-runs list to UTC to check those.
FAQ
Does it support seconds (6 fields)?
No. Quartz and Spring use a leading seconds field. This tool checks standard 5-field cron and tells you if it sees 6 fields.
Why are my GitHub Actions runs late?
GitHub runs scheduled workflows on a best-effort basis, and during high load they can start several minutes late. The schedule itself is always read as UTC.