Cron Parser - parse and validate cron expressions online
At 04:30, every day.
Next runs · UTC
- —
- —
- —
- —
- —
Calendar
September 2026 · UTC
0 runs
About this tool
@datasert/cronjs-parser backs production cron runtimes.What the cron parser does
- Tokenize - split the string into fields by whitespace, detect 5/6/7-field shapes, and split each field into atoms (literals, ranges, lists, steps, modifiers).
- Validate - check each atom against the field range (minute 0-59, hour 0-23, etc.). Surface the offending field if anything is off.
- Compute next matches - given a start time (now, by default), compute the next N timestamps the expression fires. This is the bit a parser alone can't do - you need the matcher too.
Cron parser libraries by language
- Node.js / TypeScript -
@datasert/cronjs-parser+@datasert/cronjs-matcher(CronTool uses these). Pair withcronstruefor the English description. - Node.js (alt) -
node-cron,croner,cron-parser. See the node-cron guide. - PHP -
dragonmantank/cron-expression. See the dragonmantank guide. - Go -
robfig/cron. See the robfig/cron guide. - Java / Kotlin - Quartz Scheduler, Spring's
CronExpression. See the Quartz guide. - Ruby -
rufus-scheduler,fugit. See the rufus-scheduler guide. - .NET - NCRONTAB, Hangfire. See the NCRONTAB last-day guide for syntax notes.
Parser edge cases to watch
- 5 vs 6 vs 7 fields - different parsers count differently. Standard cron is 5; AWS is 6; Quartz is 6 or 7. The same string parses to different schedules under different dialects.
- Day-of-week 0 vs 7 - both are Sunday in Unix cron, but Quartz uses 1-7 (1=Sunday). Always verify against the calendar.
- February 31 - most parsers accept it as syntactically valid but it never fires. The matcher silently returns no matches.
- Daylight saving - runs in the skipped hour are skipped; runs in the repeated hour fire twice. Most parsers don't flag this.
Examples
- 0 18 * * *Every day at 18:00
- 0 */5 * * *Every 5 hours
- 0 18 * * 1-5Weekdays at 18:00
- 0 0 1 * *Once a month, on the 1st at midnight
Cheatsheet
Full cheatsheet| Field | Req. | Range | Wildcards |
|---|---|---|---|
| minute | yes | 0-59 | , - * / |
| hour | yes | 0-23 | , - * / |
| day of month | yes | 1-31 | , - * / |
| month | yes | 1-12 or JAN-DEC | , - * / |
| day of week | yes | 0-6 or names; some dialects use 0-7 or 1-7 — see Dialects | , - * / |
Frequently asked questions
Syntax
How do I parse a cron expression?
Paste it into CronTool. @datasert/cronjs-parser validates the fields, cronstrue creates the English sentence, and the matcher computes five next runs plus the visible month's calendar.
Why is my cron failing to parse?
Typical causes are missing fields, out-of-range values, descending ranges, invalid steps, or misplaced special characters. CronTool converts parser errors into messages such as Hour must be 0-23; Standard mode separately rejects ?, but L does not inherently require Extended mode.
Is there an online cron parser I can use?
Yes, this page parses cron in the browser. Production analytics may record valid, copied, or shared cron strings, so do not treat it as a no-transmission surface; use your runtime's parser for sensitive programmatic validation.
What does the cron parser output?
CronTool displays editable fields with help, a humanized validation result, an English sentence, five next runs in the selected timezone, and a month calendar. It does not expose an AST or simultaneous local-and-UTC lists.
How many fields should the cron parser expect?
Standard cron has five fields. Quartz has six with required seconds and an optional seventh year; AWS EventBridge has six minute-first fields including year.
Field counts by dialectWhich parser errors identify a field range?
It rejects values outside their field, such as minute 60, hour 24, day-of-month 32, or month 13. The field highlight identifies where parsing stopped.
Accepted field rangesHow does CronTool parse compound field tokens?
It accepts literals, comma lists, inclusive ranges, steps, names, and supported special forms through Datasert's grammar. Acceptance is not proof that another scheduler supports the same token.
Cron operatorsTiming
How does the parser expand a step token?
*/15 in the minute field expands within 0-59 to 0, 15, 30, and 45. Steps reset at field boundaries rather than measuring elapsed time. Expression: */15 * * * *
Days and months
Can the parser read an nth-weekday token?
Yes, in a supporting Extended dialect. 0 0 9 ? * MON#2 parses MON#2 as the second Monday and ? as an unspecified day-of-month. Expression: 0 0 9 ? * MON#2
Does parsing both day fields mean they are ANDed?
No. Parsing proves the tokens are valid; Vixie runtime semantics OR two restricted day fields. 0 9 1 * 1 therefore runs on Mondays and month-day 1. Expression: 0 9 1 * 1
Why is a successful parse not proof of a future run?
Fields can be individually valid while their calendar combination is impossible. CronTool statically catches fixed cases such as 0 0 30 2 *, but an empty capped matcher result alone is not proof of never firing. Expression: 0 0 30 2 *
Platforms
What library should I use to parse cron in code?
Choose the library used by your runtime: CronTool uses @datasert/cronjs-parser plus @datasert/cronjs-matcher; common alternatives include dragonmantank for PHP, robfig for Go, Quartz or Spring for Java, and NCrontab for .NET. CronTool does not emulate their differing semantics.
Why does ? produce a parser error in Standard mode?
? is not a Standard Vixie operator. Switch to Extended mode for a dialect that uses it to leave one day field unspecified.
Debugging
Where does CronTool's parser boundary end?
The boundary ends at schedule fields and derived previews. CronTool never executes commands and cannot inspect PATH, environment variables, permissions, or scheduler logs.
Runtime debugging checklistWrite the cron here. Run it on Crontap.
Point Crontap at any URL. Pick any cron. Done.
WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.
1.9k+ teams · Free forever tier · No credit card