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.

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.

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.