Cron expression explainer and builder
This tool translates any 5-field cron expression into a plain-English sentence and breaks each field down so you can spot mistakes at a glance. It’s for anyone scheduling a job in crontab, GitHub Actions, Railway, AWS EventBridge, or a CI pipeline who wants to confirm a schedule reads the way they intended before shipping it.
How it works
A cron expression has five space-separated fields: minute, hour, day-of-month,
month, day-of-week. The tool splits on whitespace, validates each field against
its allowed range, and translates it. It understands * (every value), */n
steps (every nth value), x/n (every nth value starting at x), a-b ranges, and
a,b,c comma lists. It then assembles the parsed parts into one sentence — taking
care with the cron rule that when both day-of-month and day-of-week are set, the
job runs when either matches. Eight presets seed common schedules.
Example expressions explained
The expression:
30 8 * * 1-5
explains as: at 08:30, Monday through Friday. Field by field — minute 30, hour 8, every day of the month, every month, days Monday–Friday. This is the pattern you would use for a weekday morning report or a business-hours job.
A few more common patterns:
0 */4 * * * → every 4 hours (at minute 0)
0 0 1 * * → at midnight on the 1st of every month
15 14 1 * * → at 14:15 on the 1st of every month
0 22 * * 1-5 → at 22:00 on weekdays
The day-of-month and day-of-week OR trap
A well-known cron surprise: if you restrict both the day-of-month and
day-of-week fields, the daemon treats them as an OR. The expression
0 9 15 * 1 fires at 09:00 on the 15th of every month and at 09:00 every
Monday — not just on Mondays that happen to fall on the 15th. If you want the
second Monday of the month, cron cannot express that directly; you need a
wrapper script. The explainer calls this out in the translation so you do not
ship the wrong schedule by accident.
Field reference
| Field | Position | Range | * means |
|---|---|---|---|
| Minute | 1 | 0–59 | every minute |
| Hour | 2 | 0–23 | every hour |
| Day of month | 3 | 1–31 | every day |
| Month | 4 | 1–12 | every month |
| Day of week | 5 | 0–6 (0 = Sun) | every weekday |
Where cron expressions run
The standard 5-field format is accepted by crontab on Linux and macOS,
GitHub Actions schedules, AWS EventBridge, Railway’s cron service, Heroku
Scheduler, and most CI/CD platforms. Tools like Quartz (Java) and some Node.js
libraries add a 6th field for seconds — this explainer covers the 5-field POSIX
format. All parsing runs locally in your browser — nothing is sent to any server.