The five fields
A standard cron expression has five fields separated by spaces, read left to right:
- Minute: 0–59.
- Hour: 0–23, in 24-hour time.
- Day of month: 1–31.
- Month: 1–12, or JAN–DEC.
- Day of week: 0–6 with 0 as Sunday (7 is also Sunday), or SUN–SAT.
Special characters
- * (any): every value in the field.
- , (list): 1,15 means the 1st and the 15th.
- - (range): 1-5 means Monday through Friday in the day-of-week field.
- / (step): */15 in the minute field means every 15 minutes; 9-17/2 means every 2 hours from 9 to 17.
- Shortcuts: @hourly, @daily (same as @midnight), @weekly, @monthly and @yearly.
Time zones: the most common surprise
Cron runs in the time zone of whatever executes it. GitHub Actions scheduled workflows always use UTC, as do most cloud schedulers and containers by default. A job written as 0 9 * * * meaning 9 AM in New York actually runs at 9 AM UTC, which is 4 or 5 AM in New York depending on daylight saving time.
That's why this tool shows the next runs in UTC by default, with a switch to your local time.
Common cron schedules
- */5 * * * *: every 5 minutes.
- 0 * * * *: every hour, on the hour.
- 0 */6 * * *: every 6 hours (00:00, 06:00, 12:00, 18:00).
- 0 0 * * *: every day at midnight.
- 30 2 * * *: every day at 2:30 AM.
- 0 9 * * 1-5: 9 AM, Monday to Friday.
- 0 0 * * 0: every Sunday at midnight.
- 0 0 1 * *: the first day of every month at midnight.
- 0 0 1 1 *: once a year, on 1 January.
When both day fields are set
If you fill in both the day-of-month and the day-of-week field, standard cron runs the job when either one matches, not when both do. 0 0 13 * 5 runs on every 13th of the month and on every Friday, not only on Friday the 13th.
To run only when both match, keep one of the fields as * and check the other condition inside the script.