Cron Expression Builder

Build and validate cron expressions with a plain-English description of when they will run.

Parsing and the next-run calculation run locally in your browser using standard 5-field cron syntax, so nothing you type here is sent to a server.

Cron Expression Builder

Build, validate, and understand a 5-field cron expression, with the next run times computed live.

minute · hour · day of month · month · day of week

Quick patterns

In plain English

Runs at 09:00, on Monday through Friday.

How Cron Syntax Actually Works

A cron expression is five fields separated by spaces, each one narrowing down when a job runs: minute, hour, day of month, month, and day of week. Every field defaults to *, meaning “any value,” and a job only fires in the exact minute where every field's condition is satisfied at once. 0 9 * * 1-5 reads as minute 0, hour 9, any day of month, any month, weekdays only, which is why it fires once at 09:00 on Monday through Friday and nowhere else.

The part that trips people up almost every time is what happens when both the day-of-month and day-of-week fields are restricted at once. It is tempting to read them as an AND, “the 1st, but only if it's also a Monday,” but standard cron treats them as an OR instead: the job runs if either condition is true. 0 0 1 * 1 fires on the 1st of every month and separately on every Monday, not only on a Monday that happens to land on the 1st. If you only want one of the two conditions, leave the other field as *.

Step values (*/15), ranges (9-17), lists (1,15,30), and combined range-steps (9-17/2) all compose within a single field, and most schedulers also accept three-letter names for months and days (jan, mon) as a more readable alternative to the numeric form. This tool accepts both and treats them identically.

Common Use Cases

Checking a schedule before it ships

Paste an expression from a deploy config or a scheduler UI and see the next few run times computed directly, instead of mentally simulating five interacting fields.

Debugging a job that fired at the wrong time

The plain-English description surfaces the day-of-month/day-of-week OR behavior explicitly, which is the most common reason a job runs on a day nobody expected.

Building an expression without memorizing field order

The field-by-field builder sets each of the 5 fields independently (every, every N, a specific value or list, or a range) and assembles the expression for you.

Frequently Asked Questions

Is my cron expression sent to a server?

No. Parsing, validation, and the next-run calculation all run in your browser. Nothing you type here is transmitted anywhere.

What do the 5 fields mean?

In order: minute (0-59), hour (0-23), day of month (1-31), month (1-12 or jan-dec), and day of week (0-7, where both 0 and 7 mean Sunday, or sun-sat). This tool does not support the 6-field "seconds" variant some schedulers use.

Why did my job run on a day I did not expect?

If both the day-of-month and day-of-week fields are restricted (not *), standard cron treats them as OR, not AND: the job runs when either condition is true. "0 0 1 * 1" runs on the 1st of the month AND on every Monday, not only on a Monday that happens to be the 1st.

What is the difference between */15 and 0,15,30,45?

For the minute field they produce the same run times, but */15 is a step expression (every 15 units starting from the field minimum) while 0,15,30,45 is an explicit list. They diverge if the field does not start at 0: */15 on hours 9-17 starts at 9, while an explicit list gives full control over which values are included.