KKwikfig.

Cron Expression Generator

Build cron expressions by pointing and clicking, or paste one in — with a plain-words summary and the next five run times computed against your local clock. Runs entirely in your browser — your numbers never leave this device.

In plain words
Every day at 09:00
Next 5 runs (your local time · UTC)
  1. 11/2/2026, 9:00:00 AM
  2. 11/3/2026, 9:00:00 AM
  3. 11/4/2026, 9:00:00 AM
  4. 11/5/2026, 9:00:00 AM
  5. 11/6/2026, 9:00:00 AM

Cron fields are read against the local clock of the machine running the job, and the runs above are shown in your browser's local time. One classic trap: when both the day-of-month and day-of-week fields are restricted, a day matches if either one does — this engine follows that standard rule.

How it works

Five fields: minute (0–59) hour (0–23) day-of-month (1–31) month (1–12) day-of-week (0–7, both 0 and 7 are Sunday) | * = every value, a-b = a range, a,b = a list, /n = every nth value | If BOTH day fields are restricted, a day matches when EITHER does
The five fields and their operators
FieldRangeOperators that work in it
Minute0–59* , - / — e.g. */15 is every quarter hour
Hour0–23* , - / — e.g. 9-17 is hourly during work hours
Day of month1–31* , - / — e.g. 1,15 is the 1st and 15th
Month1–12* , - / — e.g. */3 is quarterly
Day of week0–7 (0 and 7 = Sunday)* , - / — e.g. 1-5 is Monday to Friday

Cron is the Unix scheduler's one-line language: five fields, and the job runs whenever the current minute matches all of them. This tool works in both directions — choose presets per field (every day at 09:00, weekdays only, the 1st and 15th) and the expression is assembled for you, or paste any 5-field expression and get it parsed back into fields, a plain-words summary for the common shapes, and the next five times it will fire. The builder and the free expression field stay in sync, so you can start from a preset and hand-tune one field without starting over.

The run times are computed against your local clock, which is how cron itself behaves on a machine — a '0 9 * * *' job fires at 09:00 in the timezone of whatever runs it. That matters when you copy an expression to a server in another timezone (most cloud servers keep UTC): the expression travels, the wall-clock meaning does not. The summary names the common patterns in words because most real schedules are one of a handful of shapes, and anything outside them is honestly labelled a custom schedule rather than force-fitted into a sentence.

One trap deserves its own paragraph because it has bitten everyone: the day rule. If both day-of-month and day-of-week are restricted, standard cron fires when EITHER matches, not both — '0 0 1 * 1' runs on the 1st of every month AND on every Monday, as the worked example shows. To get 'the first Monday of the month' you need a different mechanism entirely. This engine follows the standard rule and the example demonstrates it, dates and all.

Worked examples

The daily 09:00 job

Input
Expression = 0 9 * * *, from 2024-01-01 00:00
Working
Minute 0 and hour 9 are fixed; the other three fields are *, so every day qualifies. The next runs after midnight on 1 January are 09:00 that same morning and the four mornings after.
Result
2024-01-01 09:00, 2024-01-02 09:00, 2024-01-03 09:00, 2024-01-04 09:00, 2024-01-05 09:00

Every quarter hour

Input
Expression = */15 * * * *, from 2024-01-01 00:07
Working
*/15 expands the minute field to 0, 15, 30, 45. Starting the scan just after 00:07, the matches fall at 00:15, 00:30, 00:45, then roll into the next hour at 01:00 and 01:15.
Result
00:15, 00:30, 00:45, 01:00, 01:15 on 2024-01-01

The OR rule, demonstrated

Input
Expression = 0 0 1 * 1, from 2024-01-02
Working
Both day fields are restricted: day-of-month 1 and day-of-week 1 (Monday). A day qualifies if EITHER holds, so the runs are the Mondays of January — the 8th, 15th, 22nd, 29th — and then 1 February, a Thursday, which qualifies on the day-of-month alone.
Result
2024-01-08, 2024-01-15, 2024-01-22, 2024-01-29, 2024-02-01 (all at 00:00)

Frequently asked questions

How do I say 'every weekday at 09:00'?

Restrict the day-of-week field to the range 1-5 and leave day-of-month as *: 0 9 * * 1-5. The summary will read it back as a custom schedule unless it matches one of the named shapes — build it with the presets: minute 0, hour 09, day-of-week 'Weekdays (Mon–Fri)'.

Why did my job run on the 1st AND on Mondays?

The standard cron day rule: when both day-of-month and day-of-week are restricted (neither is *), the day matches if either field does. '0 0 1 * 1' therefore means the 1st of the month plus every Monday — the worked example lists exactly those dates. If you want only one condition, leave the other field as *.

Can cron express 'the last day of the month' or 'the first Monday'?

Not in the standard 5-field syntax this tool builds: there is no L or # operator, and day-of-month 31 simply never fires in shorter months (a 29 February job fires only in leap years — this engine will happily find 2024-02-29 for '0 0 29 2 *'). Some schedulers add those operators as extensions; standard crontab does not have them, and scripts that need them usually check the date themselves.

Which timezone do the next-run times use?

Yours — the runs are computed and displayed in your browser's local time, matching how cron fires on a machine set to your timezone. If you paste the expression into a server that keeps UTC, the same expression fires at the same numbers on the UTC clock, which is a different moment. Convert deliberately when the schedule is about people, not machines.

What does */15 in the minute field expand to?

The full range stepped by 15: 0, 15, 30, 45. Steps compose with ranges too — 9-17/2 in the hour field is 9, 11, 13, 15, 17 — and the parser view in this tool shows the expanded value list each field produces, so an expression's meaning never has to be guessed.

Does 0 and 7 really both mean Sunday?

Yes. The day-of-week range is 0–7 with both endpoints defined as Sunday, a quirk inherited from early cron. This parser folds 7 onto 0, so '0 0 * * 7' and '0 0 * * 0' produce identical runs — convert 7s to 0s in expressions you keep, for the next reader's sake.

Related tools

More in Developer Tools · Browse all tools