Paste a 5-field cron expression below; the schedule and next run times render on the right.
Cron Expression Parser
Paste a standard 5-field cron expression (minute hour day-of-month month day-of-week) and get a plain-English description of the schedule plus the next 5 times it will run.
Parsing happens entirely in your browser - the expression never leaves this device, and nothing is uploaded.
Supports ranges (1-5), lists (1,3,5), step values (*/15), and the wildcard character across all five fields.
An unsupported field, such as a named month or weekday alias, returns an inline explanatory error instead of a silent misparse. No account or signup is required, and nothing you paste here is stored beyond this page session.
How day-of-month and day-of-week combine when both are restricted
Cron Expression Parser follows the standard cron rule for the two day fields, and it is the part of cron syntax that surprises the most people. When only ONE of day-of-month or day-of-week is restricted (not a wildcard), only that field decides which days match. When BOTH fields are restricted at the same time, the tool switches to a union: a day matches if it satisfies EITHER field, not only when it satisfies both together.
| Day-of-month field | Day-of-week field | Which days match |
|---|---|---|
* | * | Every day |
15 | * | Only the 15th of each month |
* | 1 | Only Mondays |
15 | 1 | The 15th OR any Monday - not only a 15th that happens to land on a Monday |
Paste 0 9 15 * 1 into Cron Expression Parser and the next-run list includes 9am on the 15th of the month AND 9am on every Monday in between, because the two day fields combine with OR once both are restricted. That matches standard cron behavior; it is not an ambiguity the parser invented.
The exact inline error for three common mistakes
Cron Expression Parser never fails silently - every unparseable field produces a specific inline message naming what went wrong, so you see the exact reason instead of a generic failure.
| What you paste | Inline error shown |
|---|---|
* * * * (4 fields) | "Expected 5 space-separated fields (minute hour day-of-month month day-of-week); got 4. Named aliases (@daily, @hourly) and 6-field seconds cron are not supported." |
0 25 * * * (hour out of range) | "Could not parse the hour field ("25"). Supported syntax: * , */N , N , N-M , N-M/N (comma-separated). Month/weekday NAME aliases (JAN, MON) are not supported - use numbers." |
0 9 * JAN * (named month) | The same "Could not parse the month field" message, because JAN is treated as an unsupported alias rather than a valid token. |
Each message names the specific field that failed, so a five-field expression with one bad token still tells you which of the five is wrong instead of a blanket "invalid cron string" response.
Frequently Asked Questions
What does Cron Expression Parser do?
It reads a standard 5-field cron expression (minute hour day-of-month month day-of-week) and shows a plain-English description of the schedule plus the next 5 times it will run - entirely in your browser.
When should I reach for Cron Expression Parser?
Use it to double-check a cron schedule before deploying it, or to quickly translate someone else's crontab line into plain English without installing a scheduler-syntax checker.
Does it support named aliases like @daily or 6-field seconds cron?
No. It supports the standard 5-field syntax with *, comma lists, ranges (N-M), and step values (*/N). Named aliases (JAN, MON, @daily) and 6-field seconds-cron are not parsed.
What happens if no day ever matches, like day-of-month 31 restricted to February?
Cron Expression Parser searches up to about 5 years ahead (a 3,000,000-minute ceiling) before giving up. February never has a 31st day, so an expression like "0 0 31 2 *" never matches inside that window, and the output shows "No matching run time found in the next ~5 years (check the day-of-month / month combination is reachable)." instead of hanging or guessing a nearby date.
Does the schedule description spell out month and weekday names, or just numbers?
Minute, hour, and day-of-month values print as plain numbers, but the month and day-of-week fields print as names - "January" instead of 1, "Monday" instead of 1 - so the schedule description reads as a sentence rather than a row of digits.
What are the valid ranges for each of the five fields?
Minute accepts 0-59, hour accepts 0-23, day-of-month accepts 1-31, month accepts 1-12, and day-of-week accepts 0-6 with 0 meaning Sunday. A number outside a field's range fails to parse the same as a malformed token.