Paste a cron expression, get plain English back
Type any cron expression into the tool above and it instantly tells you exactly when that job will run — no memorising field order, no second-guessing asterisks. Perfect for anyone writing a scheduler, reviewing someone else's config, or debugging a task that fires at the wrong time.
How to use the cron expression parser
- Type (or paste) your cron expression into the input field above — for example
0 9 * * 1-5. - The tool decodes it in real time: you'll see a plain-English description and the next several run times listed.
- Tweak individual fields and watch the description update instantly so you can dial in the exact schedule you need.
Worked example: decoding a real cron schedule
Input: 30 6 1 * *
What the parser returns: "At 6:30 AM, on day 1 of every month." It also shows the next five run dates — useful for confirming the schedule is right before you deploy it.
Change it to */10 8-17 * * 1-5 and the parser reads back "Every 10 minutes, between 8:00 AM and 5:00 PM, Monday through Friday" — a handy sanity-check before pushing to production.
Cron field reference — what each position means
| Position | Field | Allowed values | Special characters |
|---|---|---|---|
| 1 | Minute | 0 – 59 | * , - / |
| 2 | Hour | 0 – 23 | * , - / |
| 3 | Day of month | 1 – 31 | * , - / ? |
| 4 | Month | 1 – 12 | * , - / |
| 5 | Day of week | 0 – 6 (0 = Sunday) | * , - / ? |
* (asterisk) means every valid value for that field. */n (step) means every n units — so */15 in the minute field fires at :00, :15, :30, and :45.
Quick reference: 3 common expressions
| Expression | Meaning |
|---|---|
0 9 * * 1-5 | 9:00 AM every weekday (Monday – Friday) |
*/15 * * * * | Every 15 minutes, all day, every day |
0 0 1 1 * | Midnight on 1 January every year |
How to parse or build cron expressions in code
Sometimes you need to validate or describe a cron string inside your own app. Here are two quick, copy-pasteable examples.
Python (using the croniter library)
# pip install croniter
from croniter import croniter
from datetime import datetime
expr = '30 6 1 * *'
base = datetime.now()
cron = croniter(expr, base)
print(cron.get_next(datetime)) # next run after now
print(cron.get_next(datetime)) # the one after that
JavaScript / Node.js (using the cron-parser package)
// npm install cron-parser
const parser = require('cron-parser');
const interval = parser.parseExpression('30 6 1 * *');
console.log(interval.next().toString()); // next run
console.log(interval.next().toString()); // then this one
Both libraries throw an error if the expression is invalid — handy for input validation at runtime.
How the parser works
The tool splits your expression into its five fields (minute, hour, day-of-month, month, day-of-week) and checks each value against the allowed range. It then walks forward through a calendar — starting from the current time — to find the next moments that satisfy all five fields simultaneously. That matching calendar walk is what produces the "next run times" list.
Special characters like ranges (1-5), lists (1,15), and steps (*/10) are expanded into the full set of matching values before the walk begins. Everything runs in your browser — your cron expression is never sent to any server and stays completely private.
When to use a cron expression parser — and when not to
Use it when you:
- Inherited a crontab you didn't write and need to understand it quickly.
- Want to double-check a schedule before deploying a job (CI pipelines, database backups, report generators).
- Are learning cron syntax and want immediate visual feedback as you type.
- Need to generate a valid expression — build it field by field and confirm the description matches your intent.
Don't rely on it when:
- Your scheduler uses extended syntax. Some systems (AWS EventBridge, Spring, Quartz) add a sixth field for seconds, or use a
?differently from standard POSIX cron. Always cross-check against your platform's own docs. - You need timezone-aware scheduling. Standard cron expressions have no timezone field — the schedule runs in whatever timezone the server uses. Tools like Kubernetes CronJobs or Airflow have their own timezone settings separate from the expression itself.
- You need sub-minute precision. Cron fires at most once per minute. For anything faster, you'll need an application-level scheduler instead.
The POSIX crontab specification defines the canonical five-field syntax this tool follows.
Bottom line: if a cron schedule looks mysterious or you're not 100% sure it'll fire when you expect, paste it in above and get a plain-English answer in seconds.