Cron expression builder and explainer
Compose a five-field cron expression with dropdowns, or paste an existing one to see what it means in plain English and when it will fire next, in your local timezone or UTC. Supports ranges, lists, step values and the @hourly / @daily / @weekly macros. All parsing happens in your browser.
Five fields: minute, hour, day of month, month, day of week.
Lists (1,15), ranges (1-5), steps
(*/5), names (JAN-DEC,
SUN-SAT) and macros like @daily are all
accepted. Everything runs in your browser.
Both day-of-month and day-of-week are restricted in this expression. Standard cron fires when EITHER one matches (OR semantics), not when both do. See the gotchas below.
Builder
Changing a row rewrites the expression above. Editing the expression updates the rows; fields the dropdowns cannot express fall back to "specific values" with the raw text.
Next runs
Cron field order and gotchas
* * * * * | | | | | | | | | +-- day of week 0-7 (0 or 7 = Sunday, or SUN-SAT) | | | +------- month 1-12 (or JAN-DEC) | | +------------ day of month 1-31 | +----------------- hour 0-23 +---------------------- minute 0-59
The biggest surprise in cron: when BOTH day-of-month and
day-of-week are restricted (neither is *), the job
fires when either one matches, not when both do.
0 0 1,15 * 3 runs on the 1st, on the 15th, AND on
every Wednesday. If you wanted "the first Wednesday of the month"
you cannot say it in classic cron; people usually add a date check
inside the script instead. This tool implements the same OR rule,
so the next-run preview matches what your crond will actually do.
Watch out for lookalike formats. Quartz (Java), Spring and some
cloud schedulers use 6 or 7 fields with a leading
seconds field and an optional trailing year;
pasting one of those into a classic crontab silently means
something else. AWS EventBridge also uses ? in the
day fields, which classic cron does not accept.
The macros @hourly, @daily (alias
@midnight), @weekly,
@monthly and @yearly (alias
@annually) expand to fixed five-field schedules.
@reboot also exists, but it is not a schedule at all:
it runs the command once when the cron daemon starts, so there is
nothing to preview here.
Finally, crond evaluates times in the server's local timezone (or
a per-crontab CRON_TZ on some systems). The preview
above matches against your browser's clock; if your server lives
in a different timezone the wall-clock times will differ.