Decode Any Cron Expression into Plain English
Every developer has stared at a five-field cron schedule and wondered when it actually fires. The five fields — minute, hour, day of month, month, day of week — pack a lot of meaning into a tiny string, and a single misplaced asterisk can run a job at 3 a.m. instead of 3 p.m. A cron expression parser removes the guesswork by translating each schedule into plain language, listing the next few run times, and flagging mistakes before they reach production. Reach for this tool whenever you inherit a crontab, review a teammate's schedule, or write a new cron job and want to verify it fires when you intend.
How to Read the Five Standard Fields
The standard POSIX cron format has exactly five fields, in this order: minute, hour, day of month, month, and day of week. Each field accepts numbers, ranges, lists, steps, and wildcards.
| Field | Range | Example |
|---|---|---|
| Minute | 0–59 | 15 |
| Hour | 0–23 | 3 |
| Day of month | 1–31 | 1 |
| Month | 1–12 | 6 |
| Day of week | 0–7 (0 and 7 are Sunday) | 0 |
Names like MON and JAN also work in most parsers. Asterisks mean "every" value in that field, so * * * * * runs every minute.
How to Use the Cron Parser
- Paste a five-field expression such as
30 2 * * *into the input box. - Check the plain-English breakdown that explains each field, one line at a time.
- Review the generated list of upcoming run times to confirm the schedule matches your intent.
- Fix any field you mistyped — for example, swap
0 3for3 0if you meant 3 p.m. - Copy the corrected expression into your crontab, scheduler, or CI config.
Real Example: Input and Output
A common backup schedule runs daily at 2:30 a.m. The expression below should produce exactly one match per day.
| Input | Output |
|---|---|
30 2 * * * | At 02:30 every day |
0 */4 * * * | Every 4 hours at minute 0 |
0 9 * * 1-5 | At 09:00 Monday through Friday |
Tips for Best Results
- Day-of-month vs. day-of-week — when both are restricted, most cron implementations run the job when either matches; test before relying on it.
- Use steps deliberately —
*/15means every 15 minutes, while0,15,30,45spells the same thing more explicitly. - Watch the hour field — hours run 0–23, so
0 13is 1 p.m. and0 1is 1 a.m. - Verify with next-run times — a parser that lists concrete future dates catches off-by-one errors instantly.
When to Use This Tool
- Debugging a silent job — a job that never runs is usually a field written backwards.
- Code review — check that a scheduled pipeline in CI fires on the intended days.
- Learning cron — experiment with ranges, lists, and steps to build intuition fast.
Frequently Asked Questions
What do the five fields in a cron expression mean?
Minute, hour, day of month, month, and day of week, in that order. An asterisk in a field means "every" value for that unit.
Is day of week 0 Sunday or Monday?
In standard cron, 0 is Sunday and 7 is also Sunday. Most parsers also accept names like SUN and MON.
What does */5 mean in a cron field?
It means every 5 units — for example */5 in the minute field fires at minutes 0, 5, 10, and so on.
Does cron support seconds?
Standard five-field cron does not. Six-field formats used by some tools add seconds as the first field, but POSIX cron has no seconds.
How do I run a job every Monday at 9 a.m.?
Use 0 9 * * 1. The 1 in the day-of-week field means Monday in most implementations.
What happens if both day-of-month and day-of-week are restricted?
Most cron implementations run the job when either field matches, which surprises many developers — test such expressions carefully.
Can I list multiple values in one field?
Yes, with commas — 0 9,18 * * * runs at 9 a.m. and 6 p.m. every day.
Why does my job run at the wrong time?
Check the hour field: it runs 0–23, so 0 3 is 3 a.m. A parser that shows upcoming run times makes this error obvious.