Quick answer
The cron expression for every weekday is 0 0 * * 1-5. The day-of-week field 1-5 is a range from Monday (1) to Friday (5), and the first two fields run it at 00:00. Saturday (6) and Sunday (0 or 7) are skipped. To run at another time on weekdays, change the minute and hour, for example 0 9 * * 1-5 for 9 AM.
- Live next runs
- Any time zone
- Field-by-field breakdown
- Seven platform snippets
- Daylight saving aware
How to use this schedule
- 1Copy
0 0 * * 1-5with the Copy expression button. - 2Check Next runs in your time zone to confirm it fires when you expect, including around daylight saving changes.
- 3Pick your platform under Use it on your platform and copy the ready-made crontab line, workflow, manifest or timer.
- 4Need a different time or day? Click Customize to open it in the cron expression generator and change any field.
How does cron number the days of the week?
The fifth field accepts 0 to 7, plus three-letter names:
| Day | Number | Name |
|---|---|---|
| Sunday | 0 or 7 | SUN |
| Monday | 1 | MON |
| Tuesday | 2 | TUE |
| Wednesday | 3 | WED |
| Thursday | 4 | THU |
| Friday | 5 | FRI |
| Saturday | 6 | SAT |
So 1-5 covers Monday through Friday, inclusive at both ends. In crontab you can write the same thing with names, MON-FRI, in any letter case, which reads better in a code review. Neither form travels everywhere: some schedulers, Vercel among them, only accept numbers, while AWS EventBridge, Quartz and Cloudflare Workers count Sunday as 1, so their weekdays are 2-6 and a copied 1-5 runs Sunday to Thursday. Check the target's numbering, and use names where they are accepted.
Is midnight the right time for a weekday job?
0 0 * * 1-5 fires at the very start of each weekday. The Monday run happens in the first minute of Monday, and the last run of the week is at 00:00 on Friday, not on Friday evening. That is ideal for jobs that prepare the working day: building reports before people log in, rotating an on-call schedule or opening a new batch. If something should happen at the end of each working day instead, use 0 18 * * 1-5 or similar, and remember that a Friday-night job belongs to Friday (5), while anything after midnight on Friday night is already Saturday (6) and won't match.
What does each field in 0 0 * * 1-5 mean?
| Field | Value | Allowed | Meaning |
|---|---|---|---|
| Minute | 0 | 0–59 | at minute 0 (on the hour) |
| Hour | 0 | 0–23 | at hour 0 (midnight) |
| Day of month | * | 1–31 | every day of the month |
| Month | * | 1–12, JAN–DEC | every month |
| Day of week | 1-5 | 0–7 (0 and 7 are Sunday), SUN–SAT | Monday through Friday |
Read together: At 00:00 on Monday, Tuesday, Wednesday, Thursday and Friday.
How do I adjust 0 0 * * 1-5 to my own schedule?
Small edits to 0 0 * * 1-5 cover most real-world needs:
| Expression | What it does |
|---|---|
0 9 * * 1-5 | 9 AM on weekdays |
0 0 * * MON-FRI | The same schedule written with day names |
*/15 9-17 * * 1-5 | Every 15 minutes during business hours on weekdays |
0 18 * * 1-5 | 6 PM at the end of each working day |
0 0 * * 6,0 | Midnight on weekends instead |
Need something else? Click Customize at the top of the page to open this schedule in the cron expression generator and change any field.
Related schedules: Every weekday at 9am · Every weekend · Business hours (every hour) · Every Monday
Browse all schedules in the cron schedule library.
How do I run 0 0 * * 1-5 in crontab, GitHub Actions, Kubernetes and the cloud?
| Platform | Write it as | Time zone |
|---|---|---|
| Linux crontab | 0 0 * * 1-5 | Server's time zone; CRON_TZ= in cronie |
| GitHub Actions | - cron: "0 0 * * 1-5" | UTC by default; add timezone: (IANA name) |
| Kubernetes CronJob | schedule: "0 0 * * 1-5" | Set timeZone: (1.27+) |
| Cloudflare Workers | 0 0 * * MON-FRI | UTC only; numbers weekdays from 1 = Sunday, so use names |
| Vercel Cron Jobs | 0 0 * * 1-5 | UTC only; Hobby runs it within the hour (±59 min) |
| AWS EventBridge Scheduler | cron(0 0 ? * MON-FRI *) | Takes a time zone; legacy scheduled rules are UTC only |
| systemd timer | OnCalendar=Mon..Fri *-*-* 00:00:00 | Add a zone after the time, e.g. Europe/London |
In a crontab (crontab -e), the full line looks like this:
0 0 * * 1-5 /path/to/job.sh >> /var/log/job.log 2>&1The live panel at the top of the page builds complete, copy-ready files for each platform (workflow, CronJob manifest, wrangler.toml, vercel.json, AWS CLI and systemd units) and can shift the schedule to UTC for platforms that need it.
What can go wrong with 0 0 * * 1-5?
1-5means Monday to Friday only in cron numbering. In AWS EventBridge, Quartz and Cloudflare Workers, Sunday is 1, so the same range runs Sunday to Thursday.- Public holidays are still weekdays. Cron has no holiday calendar, so have the job check a holiday list if it must skip them.
- Ranges can't wrap around the end of the week:
5-1(Friday to Monday) is invalid. Write a list such as5,6,0,1instead. - A weekday job at 00:00 UTC runs on Sunday evening in the Americas, so the first run of the week happens before Monday starts there.
- On UTC-only platforms (Cloudflare Workers, Vercel, legacy EventBridge rules), the local time this runs at moves by an hour when daylight saving time starts or ends. Use GitHub's
timezone:, KubernetestimeZone, EventBridge Scheduler or cronie'sCRON_TZto pin it to local time.
Frequently asked questions
Last updated by the Playxoft engineering team.