Understand any cron expression instantly.
Type or build a cron expression, see the plain-English translation, and preview the next 5 scheduled run times in your timezone (free, no account, no ads).
Common schedules: paste into the tool
| Expression | Plain English |
|---|---|
| * * * * * | Every minute |
| */5 * * * * | Every 5 minutes |
| 0 * * * * | Every hour (at :00) |
| 0 0 * * * | Daily at midnight UTC |
| 0 9 * * * | Daily at 9:00 AM UTC |
| 0 9 * * 1-5 | Weekdays at 9:00 AM UTC |
| 0 0 1 * * | First day of every month |
| 0 0 * * 0 | Every Sunday at midnight |
How the cron builder works
Everything runs in your browser as you type. There is no submit button and no server round trip, so the description and the run times update on every keystroke.
- 1
Start from a preset or type your own expression
The preset chips (every 5 minutes, weekdays at 9am, first of the month, and so on) fill both the expression box and the visual builder at once. If you already have a crontab line, paste just the schedule part into the expression box.
- 2
The expression is split into 5 fields and validated
The builder splits your input on whitespace and expects exactly 5 fields: minute, hour, day of month, month, day of week. Each field is then checked against its allowed range, so 0 70 * * * fails immediately with a range error instead of silently never running.
- 3
Each field is expanded into the values it actually matches
Steps, ranges, and lists are resolved into concrete numbers. A minute field of */15 expands to 0, 15, 30, 45. A day-of-week field of 1-5 expands to Monday through Friday. The five field cards under the input show the resolved meaning of each one.
- 4
The five fields are translated into one plain-English sentence
Time (minute plus hour) is described first, then the day constraint, then the month. This is the fastest way to catch a swapped field: if you meant 9am daily but the sentence says 'at minute 9 of every hour', the minute and hour fields are the wrong way round.
- 5
The next 5 run times are calculated by walking forward in time
Starting from the next whole minute, the builder steps forward one minute at a time and keeps the first 5 moments where all five fields match. It searches up to 4 years ahead, so impossible schedules such as 30 February simply return nothing.
- 6
Copy the expression or the generated code
The copy button puts the raw expression on your clipboard. The Code Usage block below shows the same schedule as a crontab entry and as a node-cron call, ready to paste into a script or a Node.js service.
What each part of the output means
The builder shows five separate pieces of output. Reading them in order (description, then fields, then run times) catches almost every scheduling mistake before it reaches a server.
A single sentence describing when the job runs. Read it out loud and compare it to what you intended. Most cron bugs are a field in the wrong position, and the sentence exposes that instantly.
0 9 * * 1-5
→ at 9:00 AM, Monday through Friday
9 0 * * 1-5 (minute and hour swapped)
→ at 12:09 AM, Monday through FridayAppears when the expression does not have exactly 5 whitespace-separated fields, or when a field resolves to a value outside its allowed range. The error names the field so you know which one to fix.
0 9 * *
→ Expected 5 fields, got 4.
Format: minute hour day month weekday
0 25 * * *
→ Hour value out of range (0-23): 25One card per field, in order, showing the raw value and a short summary of what it resolves to. Use these to confirm that each value landed in the field you meant. The card labels never move, so a value in the wrong card is obvious.
Minute Hour Day Month Weekday
0 9 * * 1-5
"min 0" "9am" "any" "any" "Mon-Fri"The five upcoming moments the schedule fires, with weekday, date, time, and timezone abbreviation. If this list is empty while the expression is valid, no date in the next 4 years satisfies every field at once, which usually means an impossible day and month combination.
1. Monday, 10 August 2026, 09:00 BST
2. Tuesday, 11 August 2026, 09:00 BST
3. Wednesday, 12 August 2026, 09:00 BST
# 0 0 30 2 * → empty list (30 February)The same schedule rendered two ways: a crontab line with a script path, and a node-cron call for a Node.js process. Swap the placeholder path or callback for your own and the schedule is already correct.
# crontab entry
0 9 * * 1-5 /path/to/script.sh
# Node.js with node-cron
cron.schedule('0 9 * * 1-5', () => { /* ... */ });Cron field reference
| Field | Range |
|---|---|
| Minute | 0–59 |
| Hour | 0–23 |
| Day of month | 1–31 |
| Month | 1–12 |
| Day of week | 0–7 (0 and 7 = Sun) |
Special syntax: * = any · */n = every n · a-b = range · a,b = list
Platform syntax differences
- Linux crontab / Cloudflare Workers:Standard 5-field cron. This tool validates this format.
- GitHub Actions:Same 5 fields but always runs in UTC. Minimum interval is every 5 minutes.
- AWS EventBridge:Supports a 6-field format with an optional seconds field and year field. Also accepts "rate()" expressions.
- Kubernetes CronJob:Standard 5-field cron. Runs in the pod's timezone, which defaults to UTC.
When to use the cron builder
Six situations that come up constantly, with the expression to start from and the one thing worth double-checking in each case.
| Situation | Start from |
|---|---|
| Nightly database backup | 0 3 * * * |
| GitHub Actions scheduled workflow | */15 * * * * |
| A job that fired twice as often as expected | 0 0 1 * 1 |
| A job that never fires at all | Paste the live crontab line |
| Weekly report every Monday morning | 0 8 * * 1 |
| Cloudflare Workers cron trigger | 0 */6 * * * |
Frequently Asked Questions
What order are the 5 fields in a cron expression?
# ┌───────── minute (0–59)
# │ ┌───────── hour (0–23)
# │ │ ┌───────── day of month (1–31)
# │ │ │ ┌───────── month (1–12)
# │ │ │ │ ┌───────── day of week (0–7, 0 and 7 = Sunday)
# │ │ │ │ │
* * * * *What does * mean in a cron expression?
* means every valid value for this field. In the minute field, * means every minute (0–59). In the hour field, * means every hour.
| Symbol | Meaning | Example |
|---|---|---|
| * | Every value | * in minute = every minute |
| */n | Every n values | */5 in minute = every 5 minutes |
| a-b | Range | 1-5 in day-of-week = Monday to Friday |
| a,b | List | 0,6 in day-of-week = Sunday and Saturday |
How do I run a job every 5 minutes?
*/5 * * * * # every 5 minutes
*/15 * * * * # every 15 minutes
*/30 * * * * # every 30 minutesThe */ prefix means 'every N'. So */5 in the minute field runs at minutes 0, 5, 10, 15... up to 55.
How do I schedule a job for weekdays only?
0 9 * * 1-5 # 9:00 AM, Mon–Fri
0 0 * * 1-5 # midnight, Mon–Fri
0 9 * * 0,6 # 9:00 AM on weekends onlyPut 1-5 in the day-of-week field (the 5th field). Values: 0 = Sun, 1 = Mon, 2 = Tue, 3 = Wed, 4 = Thu, 5 = Fri, 6 = Sat. Both 0 and 7 represent Sunday.
What timezone does a cron job run in?
- By default, cron runs in the system timezone of the server (usually UTC on most cloud hosts).
- The Next 5 run times on this page show times in your local browser timezone for easy verification.
- Always confirm your server's timezone before deploying a time-sensitive job.
What happens when both day-of-month and day-of-week are set?
When both fields are restricted (neither is *), cron uses OR logic: the job runs if either condition is true.
0 0 1 * 1 # midnight on the 1st of every month
# OR every Monday (whichever comes first)