Cron Expression Generator
Click together a cron schedule or paste an existing one. The generator explains it in plain English, checks every field and lists the next run times in your local time zone or UTC.
Builder
Next run times
How to use the Cron Expression Generator
- Start from a preset or type an expression such as
*/15 9-17 * * 1-5into the box. - Fine-tune each field with the builder tabs: every unit, every N units, specific values or a range.
- Read the plain-English line to confirm the schedule means what you intend.
- Check the next run times. Switch between local time and UTC, or choose a different start date, then press Calculate Next Runs.
- Copy the expression (or the full crontab line) into your crontab, CI pipeline or scheduler.
Cron syntax at a glance
┌───────────── minute (0–59) │ ┌─────────── hour (0–23) │ │ ┌───────── day of month (1–31) │ │ │ ┌─────── month (1–12 or JAN–DEC) │ │ │ │ ┌───── day of week (0–6 or SUN–SAT, 7 = Sunday) │ │ │ │ │ * * * * * command to run
| Symbol | Meaning | Example | Matches |
|---|---|---|---|
* | Every value | * in hour | 0, 1, 2 … 23 |
, | List | 1,15 in day of month | the 1st and the 15th |
- | Range (inclusive) | 1-5 in day of week | Monday to Friday |
/ | Step | */15 in minute | 0, 15, 30, 45 |
a-b/n | Step within a range | 9-17/2 in hour | 9, 11, 13, 15, 17 |
a/n | Step from a to the end | 5/20 in minute | 5, 25, 45 |
Common cron schedules
| Expression | Runs |
|---|---|
*/5 * * * * | Every 5 minutes |
0 * * * * | At the start of every hour |
0 */6 * * * | At 00:00, 06:00, 12:00 and 18:00 |
0 0 * * * | Every day at midnight (same as @daily) |
30 8 * * 1-5 | 08:30 Monday to Friday |
*/15 9-17 * * 1-5 | Every 15 minutes from 09:00 to 17:45 on weekdays |
0 3 * * 0 | Sundays at 03:00 |
0 0 1 * * | Midnight on the 1st of every month (@monthly) |
0 0 1 1,4,7,10 * | Quarterly: 1 January, April, July and October |
0 0 29 2 * | Only on 29 February: once every leap year |
The day-of-month and day-of-week rule
When both day fields are restricted, cron runs on days that match either of them. When either field starts with *, a day has to match both. Worked examples, starting from Thursday 1 January 2026:
| Expression | Logic | First runs |
|---|---|---|
0 9 1,15 * MON | day 1 or 15 or Monday | Jan 1, Jan 5, Jan 12, Jan 15, Jan 19, Jan 26, Feb 1 … at 09:00 |
0 9 * * MON | every day and Monday = Mondays | Jan 5, Jan 12, Jan 19 … at 09:00 |
0 9 */2 * MON | odd days and Monday (field starts with *) | Jan 5, Jan 19, Feb 9 … at 09:00 |
0 9 13 * FRI | the 13th or any Friday (not just Friday the 13th) | Jan 2, Jan 9, Jan 13, Jan 16 … at 09:00 |
To run only on, say, the first Monday of the month, schedule 0 9 1-7 * * and check the weekday inside the command, for example [ "$(date +\%u)" = 1 ] && /path/to/job. In a crontab file, % must be escaped as \%.
Time zones and daylight saving time
System cron daemons use the server's local time zone (or CRON_TZ / TZ where supported); Kubernetes CronJobs default to the controller's time zone unless spec.timeZone is set; GitHub Actions schedules always run in UTC. When clocks spring forward, local times inside the skipped hour do not exist and the next-run list leaves them out; when clocks fall back, a repeated hour is shown once. Use UTC for jobs that must run at exact intervals all year.
Frequently asked questions
What are the five fields of a cron expression?
In order: minute (0–59), hour (0–23), day of month (1–31), month (1–12 or JAN–DEC) and day of week (0–6 or SUN–SAT, where 7 also means Sunday). A * means every value, so * * * * * runs every minute.
What happens when both day of month and day of week are set?
Standard cron runs the job when EITHER matches. 0 9 1 * MON runs at 09:00 on the 1st of every month and on every Monday. The OR rule only applies when both fields are restricted: if one of them starts with *, both must match. The next-run list follows these rules exactly.
How do I run a cron job every 5 minutes?
Use */5 * * * *. The step value after the slash repeats from the start of the range, so it runs at minutes 0, 5, 10 … 55 of every hour. 5-59/10 would run at 5, 15, 25, 35, 45 and 55.
Which time zone does cron use?
Classic cron uses the server's local time zone. Many cloud schedulers and CI systems, such as GitHub Actions, use UTC. Switch the next-run list to UTC to see when such a job will really fire. During daylight-saving changes, local times that do not exist are skipped.
Does this support seconds or Quartz syntax?
This tool covers the standard 5-field Unix cron format used by crontab, Kubernetes CronJobs and most CI systems. Quartz and Spring add a seconds field and special characters like L, W and #, which are reported as unsupported.
What do @daily, @weekly and the other macros mean?
@yearly (or @annually) = 0 0 1 1 *, @monthly = 0 0 1 * *, @weekly = 0 0 * * 0, @daily (or @midnight) = 0 0 * * * and @hourly = 0 * * * *. @reboot runs once at startup and has no schedule.
Is anything sent to a server?
No. Parsing, the English description and the run-time calculation all happen in your browser.