Skip to content
R3XTools

Cron Expression Generator

Compose a cron expression field by field and preview exactly when it will run.

Expression

Valid

Every 5 minutes

Builder

Minute
*/5
Hour
*
Day of month
*
Month
*
Day of week
*

Next executions

Calculating…

Previewed in your browser's time zone. A cron daemon uses the time zone of the machine it runs on, which is often not the same.

Presets

Processed locally in your browser. Parsing and schedule preview are computed locally. No API is called to explain or validate the expression.

Reference

The five fields

A cron expression is five whitespace-separated fields, read left to right as minute, hour, day of month, month and day of week. A field matches when the current time falls in its set; the job runs when all five match.

FieldRange
minute0–59
hour0–23, on a 24-hour clock
day of month1–31
month1–12, or JAN–DEC
day of week0–6 starting at Sunday, or SUN–SAT. 7 is also Sunday.

Syntax within a field

TokenMeaning
*Every value in the range.
5Exactly 5.
1,15,30A list of specific values.
9-17An inclusive range.
*/15Every 15th value from the start of the range: 0, 15, 30, 45.
9-17/2Every second value inside a range: 9, 11, 13, 15, 17.
5/15From 5 to the end of the range, every 15: 5, 20, 35, 50.

The day-of-month and day-of-week trap

These two fields are combined with OR, not AND — the single most surprising rule in cron. 0 0 1 * 1 does not mean "the first of the month, if it is a Monday". It means "every 1st of the month, and every Monday".

The OR applies only when both fields are restricted. If either is *, the other one simply decides. To get a real conjunction you need a guard inside the job itself, such as a date check that exits early.

Nicknames

Most implementations accept @yearly, @annually, @monthly, @weekly, @daily, @midnight and @hourly. They expand to ordinary expressions, and typing one here shows what it expands to. @reboot is different: it fires when the daemon starts and has no schedule to preview.

Time zones and missing hours

Cron evaluates against the local time of the machine running it. The preview here uses your browser's zone or UTC, whichever you select — check that this matches your server before trusting it.

Daylight-saving transitions are the classic source of surprise: a job scheduled at 02:30 does not run on the day that hour is skipped, and may run twice on the day it repeats. Schedules in UTC avoid the problem entirely.

What this tool does not parse

Non-standard extensions are out of scope: L (last), W (nearest weekday), # (nth weekday) and the six-field form with seconds used by Quartz and some job runners. Those are implementation features rather than cron syntax, and silently accepting them would mislead you about what your daemon will do.

Questions

What do the five fields mean?
Minute, hour, day of month, month, day of week — in that order. So 30 2 * * 1 is 02:30 every Monday. The tool reads any expression back in plain English so you can check it without memorising the order.
What happens if I set both day of month and day of week?
They are ORed, not ANDed. 0 0 1 * 1 runs on the 1st of the month and on every Monday, not on Mondays that fall on the 1st. This surprises almost everyone; the preview of the next runs makes it obvious.
What time zone does cron use?
The system time zone of whatever runs it, which is often UTC on a server and local time on a laptop. You can preview an expression here in either UTC or your local zone to see the difference before it bites during a daylight-saving change.