Cron expression builder
Type a cron expression to see what it means and when it next runs, in any timezone.
Standard 5-field cron plus the common 6-field (leading seconds) extension and
@ shorthand. Runs entirely in your browser — nothing you type is sent
anywhere.
Nothing to describe yet.
| Field | Raw | Matches |
|---|---|---|
| Nothing to break down yet. | ||
| # | Local time (chosen timezone) | UTC | In |
|---|---|---|---|
| Nothing to compute yet. | |||
About this tool
Type a cron expression — standard 5-field (minute, hour, day-of-month, month, day-of-week), the common 6-field extension with a leading seconds field, or @ shorthand like @daily — and this page parses it, describes it in plain English where it can, breaks every field down into the exact values it matches, and lists the next ten times it would run, computed in whichever timezone you pick.
Field count is detected automatically from what you type — 5 space-separated fields for standard cron, 6 for the seconds-first extension. There is no separate mode to choose.
How it works
Each field is parsed into the exact set of values it allows — *, */N steps, A-B ranges, A-B/N stepped ranges, and comma-separated lists of any of those, plus JAN–DEC and SUN–SAT names. The next-run search then does calendar arithmetic directly — jump to the next allowed month, then day, then hour, then minute (then second) — rather than checking every minute one at a time, so it stays fast even for a search spanning years.
Day-of-month and day-of-week follow cron's real, often-misimplemented rule: if both fields are restricted (neither is a bare *), a date matches if it satisfies either one, not both. A pattern like 0 9 1 * MON runs on the 1st of the month and every Monday — not only when the 1st happens to fall on a Monday. If only one of the two fields is restricted, only that one applies, as expected.
Timezone conversion uses the browser's own Intl.DateTimeFormat with a target IANA zone — the same data your operating system uses for daylight saving — rather than a hand-written or bundled timezone database. The cron fields are matched against the wall-clock time in the chosen timezone: "9am" means 9am there, across a daylight-saving change, not a fixed UTC offset that would drift by an hour twice a year.
Common questions
Why does my pattern run on more days than I expected?
Almost always the day-of-month/day-of-week OR rule above — restricting both fields is additive, not a further filter. To run only on, say, "the 1st of the month, but only if it's a Monday", cron cannot express that directly; this page will not silently invent an AND that real cron does not implement.
Does this run the job, or just show when it would run?
Only the second. There is no scheduler here, no server, and nothing is ever sent anywhere — it reads the expression you typed and computes times from it, entirely in your browser.
What does @reboot show in Next runs?
Nothing — a note instead. @reboot means "once at system boot", which has no computable schedule at all.
Known limitations
L, W, #Quartz/Jenkins-style extensions ("last day of month", "nearest weekday", "3rd Friday") are not part of standard cron and are not supported — this parses Vixie/POSIX-style cron, which is what Linuxcrontab, most CI systems and job schedulers use.Search horizonNext-run search stops after 8 years. An expression that can never match — day-of-month 31 combined with only 30-day months, for instance — reports that plainly rather than searching forever.Daylight-saving edge casesA wall-clock time that occurs twice during a "fall back" transition resolves to the earlier occurrence. A wall-clock time that never occurs during a "spring forward" gap resolves to the nearest real instant — genuinely ambiguous cases even production schedulers do not agree on.Timezone listUsesIntl.supportedValuesOf("timeZone")where the browser supports it, falling back to a short hand-picked list of common zones plus UTC otherwise.
More tools
See the whole toolbox — thirty-seven free tools planned, all running in your browser.