Cron Expression Builder

Pick a schedule shape below — the assembled cron expression, its explanation and its next run times (all in UTC) update as you go. All times you enter are read as UTC.

How it works

A cron expression is 5 space-separated fields, always in this order: minute, hour, day-of-month, month, day-of-week. Every preset above just fills in those 5 fields for you — "Daily at a time" sets the minute and hour from the time picker and leaves the rest as *; "Weekly" additionally restricts day-of-week; "Monthly" additionally restricts day-of-month. Custom exposes all 5 raw fields directly, for anyone who already knows cron syntax (*, 1,15, 1-5, */15, and 3-letter month/day names).

Whichever way the 5 fields were produced, they are handed to the exact same parser the Cron Expression Parser uses, so the plain-English explanation and next run times below are guaranteed to match what that page would say about the same expression.

Frequently asked questions

How is this different from the Cron Expression Parser?

They are inverses of the same problem. The Cron Expression Parser takes an expression you already have and explains it; this tool takes a friendly schedule — a preset, a time, a day — and assembles the 5-field expression for you. Both validate and explain using the exact same underlying parser, so a schedule built here can never come back with a different explanation when pasted into the parser.

What do the 5 fields mean, in order?

Minute, hour, day-of-month, month, day-of-week — always in that order, whether the pieces come from a preset above or from the raw Custom fields.

Why does restricting both day-of-month and day-of-week at once surprise people?

In standard cron, when both fields are restricted to something other than *, a date matching either one runs — it does not have to satisfy both at the same time. That is a common real-world gotcha, and the Custom mode here follows the exact same rule the Cron Expression Parser explains, since both are built on the same parser.