Cron Expression Parser
Turn a 5-field cron expression into a plain-English description of when it runs.
Schedule
At 09:00 AM, Monday through Friday
Examples
How to use the Cron Expression Parser
- Type a five-field cron expression: minute, hour, day of month, month, day of week.
- Read the plain-English schedule underneath to confirm it runs when you expect.
- Not sure where to start? Click one of the examples, then adjust it field by field.
About the Cron Expression Parser
A cron expression is a compact, 5-field syntax used to schedule recurring jobs on Unix-like systems, in CI/CD pipelines, and in countless task schedulers — but reading one at a glance is notoriously easy to get wrong. Each field (minute, hour, day-of-month, month, day-of-week) can hold a wildcard, a specific number, a range, a step, or a comma-separated list, and misreading just one field can mean a job runs at 9 AM instead of 9 PM, or every day instead of only on weekdays.
This tool parses a standard 5-field cron expression and translates it into a plain-English sentence describing exactly when it runs, so you can double-check a schedule before deploying it — or make sense of one you inherited from someone else's codebase. It validates the expression as you type and explains clearly what's wrong if a field is malformed, rather than failing silently.
Worked example
Example: the expression `0 9 * * 1-5` describes a job that runs at 09:00 AM, Monday through Friday — a common schedule for a weekday business-hours task — while `*/15 * * * *` describes a job that runs every 15 minutes, all day, every day.
Examples to copy
- 30 2 * * * — every day at 02:30.
- 0 */6 * * * — every six hours, at 00:00, 06:00, 12:00, and 18:00.
- 0 0 1 * * — at midnight on the first day of every month.
- 0 9 * * 1 — every Monday at 09:00.
- 15 8,12,17 * * 1-5 — at 08:15, 12:15, and 17:15 on weekdays.
- 0 0 1 1 * — once a year, at midnight on January 1.
Gotchas that catch people out
- Steps restart every hour. */7 in the minute field runs at 0, 7, 14 … 49, 56 and then 0 again, so there's a 4-minute gap at the top of each hour. A step only spaces runs evenly when it divides the field's range exactly.
- Day of month and day of week combine with OR. In standard cron, if both fields are restricted, the job runs when either matches: 0 0 13 * 5 runs on every 13th and on every Friday, not just on Friday the 13th.
- Timezones. Cron uses the server's timezone unless your scheduler says otherwise; GitHub Actions schedules, for example, always run in UTC.
- Daylight saving. In timezones that change their clocks, a job scheduled between 01:00 and 03:00 can be skipped or run twice on the change days, depending on the cron implementation. Schedule important jobs outside that window or run the server in UTC.
Other cron flavors
This parser reads the standard 5-field format with numbers, wildcards, ranges, steps, and lists. Some schedulers extend it: Quartz and Spring add a seconds field at the start (6 or 7 fields) and use ? in the day fields; many crontabs also accept names like MON or JAN and shortcuts like @daily. Translate those into the numeric 5-field form to check them here.
Frequently asked questions
- What do the 5 fields in a cron expression mean?
- In order: minute (0–59), hour (0–23), day of month (1–31), month (1–12), and day of week (0–6 or 0–7, where 0 and 7 both mean Sunday). A job runs when the current time matches all five fields at once.
- What does an asterisk (*) mean in a cron field?
- An asterisk means 'every value is allowed' for that field — for example, `*` in the hour field means the job isn't restricted to any particular hour, so it can run every hour, depending on what the other fields specify.
- How do steps like */15 work?
- A step value repeats at a fixed interval across the field's full range. `*/15` in the minute field means every 15th minute starting from 0 (0, 15, 30, 45); `*/2` in the month field would mean every other month (1, 3, 5, 7, 9, 11).
- Why does this tool say my expression is invalid?
- The most common causes are having more or fewer than 5 space-separated fields, a numeric value outside that field's valid range (like '61' in the minute field), or a range where the start is greater than the end. The error message identifies which field caused the problem.