# Cron Expression Generator: Build and Test Schedules

URL: https://whatshouldibuildnext.com/tools/cron-expression-generator
Type: tool
Locale: en
Published: 2026-10-18
Updated: 2026-10-19

---

> Build a cron expression from presets or by hand, see what it means in plain English and preview the next five run times, all client-side with no signup.

*Free cron tool*

## Cron expression generator: build and preview schedules in seconds

Pick a preset or type the five fields. You get a plain English reading, a field by field breakdown and the next five run times, all calculated locally.

## Cron expression generator

Start from a preset or edit any of the five fields. The expression, its meaning and the next five run times update as you type.

*[Interactive widget — see the live page for the full experience]*

## What the tool does with your five fields

### It parses each field on its own

Every field accepts a single value, a list (1,15), a range (1-5), a step (*/10) or a mix. Month and weekday names such as JAN or MON-FRI work. Out of range values and backwards ranges are flagged on the exact field that is wrong.

### It applies the real cron matching rule

A time matches when its minute, hour and month are in your lists and the day test passes. If day of month and day of week are both restricted, cron accepts either one. If one starts with an asterisk, both must match.

### It walks the calendar to list future runs

Starting from the current minute, the script steps through days, keeps the ones that pass the day test, then lists the matching hours and minutes in order. It looks up to eight years ahead, which is enough to find a 29 February schedule.

*Syntax*

## The five fields, in the order cron reads them

A cron line is five fields separated by spaces, followed by the command. The order never changes: minute, hour, day of month, month, day of week. Most mistakes come from swapping the first two, so a schedule meant for 2 PM ends up running at minute 14 of every hour. Read it left to right and say the fields out loud before you commit.

- Minute: 0-59
- Hour: 0-23, on a 24 hour clock
- Day of month: 1-31
- Month: 1-12 or JAN-DEC
- Day of week: 0-7 or SUN-SAT, where 0 and 7 are both Sunday
- Symbols: * for every value, , for a list, - for a range, / for a step

## Cron gotchas that cost people a weekend

### The environment is nearly empty

Cron starts jobs with a minimal PATH and no shell profile. A script that works in your terminal can fail silently from cron. Use absolute paths for the command and for any file it reads, and redirect output to a log file so you can see errors.

### A percent sign ends your command

In a crontab line, an unescaped % is treated as a newline, and everything after it is sent to the command as input. Date formats like date +%F need each percent escaped with a backslash. Put the command in a script and the problem disappears.

### Every minute is rarely what you want

A job that runs every minute and takes 90 seconds will overlap with itself. Guard long jobs with a lock, or move to a queue. If you only need something every few minutes, a step such as */5 is gentler and easier on whatever the job calls.

### Time zones are not yours

A crontab uses the server's time zone. Hosted schedulers usually use UTC. A job set for 09:00 may fire at 17:00 in Taipei or 04:00 in Bangkok depending on where the machine lives. State the time zone in a comment next to the line.

### Weekday and day of month combine as OR

Restricting both fields does not narrow the schedule, it widens it. If you want the first Monday of the month, no five-field expression can say it directly. Run the job every Monday and let the script check that the date is 7 or less.

### Test the schedule before the job

Check the next five runs here first, then run the command by hand with the same environment. Two small checks beat debugging a nightly backup that never ran. Start with a harmless command such as writing the date to a file.

## Questions about cron expressions

### Is this cron expression generator free, and does it send my schedule anywhere?

It is free, needs no signup, and runs entirely in your browser. The expression you type is parsed locally by a small script on this page. Nothing is uploaded. The only network call is an anonymous counter that records that someone used the tool.

### How many fields does a cron expression have?

Five in standard Unix cron: minute, hour, day of month, month, day of week, in that order. Some schedulers add a sixth field. Quartz puts seconds first, and AWS EventBridge adds a year field and uses a question mark. This tool handles the five-field format only, so paste the result into one of those systems and check its docs for the extra field.

### Why does my job run on days I did not expect when I set both day of month and day of week?

Because standard cron treats the two fields as an OR when both are restricted. The expression 0 0 13 * 5 fires on every 13th and on every Friday, not only on Friday the 13th. If one of the two fields is a plain asterisk or starts with one, the check becomes an AND instead. The preview list above applies that rule, so you can see the real dates before you deploy.

### Which time zone do the next-run times use?

You choose. UTC is the default, because most cloud schedulers run cron in UTC. The second option uses your browser's time zone. Your own server may use a third one, so check the machine's time zone setting or the scheduler's documentation before you trust the clock times.

### Does the same expression work in GitHub Actions, Kubernetes and crontab?

The five fields mean the same thing in all three. GitHub Actions evaluates schedules in UTC, and its shortest allowed interval is every 5 minutes. A Kubernetes CronJob uses the same five fields and lets you set a time zone on newer versions. A classic crontab uses the time zone of the machine. Special strings such as @daily are accepted by many crontab implementations but not by every scheduler, so prefer the five-field form when in doubt.

### What does a step like */15 or 10/20 mean?

A step picks every nth value in a range. In the minute field, */15 means 0, 15, 30 and 45. A start value followed by a step, such as 10/20, runs from that value to the end of the field: minutes 10, 30 and 50. A range with a step, such as 8-18/2 in the hour field, means 8, 10, 12, 14, 16 and 18.

### Can I use names like MON-FRI or JAN?

Yes. The month and day-of-week fields accept three-letter English names in any case. Numbers work too: months run from 1 to 12, and days of the week from 0 to 7, where both 0 and 7 mean Sunday.

### What happens at daylight saving time changes?

It depends on the scheduler. When clocks jump forward, a job set inside the skipped hour may be skipped or run late. When clocks go back, a job set inside the repeated hour may run twice. If a job must run exactly once a day, schedule it in UTC or at a time that is not near the changeover.

## Looking for the next thing to build?

A cron job is a good first backend for a side project. The free generator on our home page hands you a full project spec, with stack and scope, in one click.

*Call to action: Get a project idea*


## FAQ

### Is this cron expression generator free, and does it send my schedule anywhere?

It is free, needs no signup, and runs entirely in your browser. The expression you type is parsed locally by a small script on this page. Nothing is uploaded. The only network call is an anonymous counter that records that someone used the tool.

### How many fields does a cron expression have?

Five in standard Unix cron: minute, hour, day of month, month, day of week, in that order. Some schedulers add a sixth field. Quartz puts seconds first, and AWS EventBridge adds a year field and uses a question mark. This tool handles the five-field format only, so paste the result into one of those systems and check its docs for the extra field.

### Why does my job run on days I did not expect when I set both day of month and day of week?

Because standard cron treats the two fields as an OR when both are restricted. The expression 0 0 13 * 5 fires on every 13th and on every Friday, not only on Friday the 13th. If one of the two fields is a plain asterisk or starts with one, the check becomes an AND instead. The preview list above applies that rule, so you can see the real dates before you deploy.

### Which time zone do the next-run times use?

You choose. UTC is the default, because most cloud schedulers run cron in UTC. The second option uses your browser's time zone. Your own server may use a third one, so check the machine's time zone setting or the scheduler's documentation before you trust the clock times.

### Does the same expression work in GitHub Actions, Kubernetes and crontab?

The five fields mean the same thing in all three. GitHub Actions evaluates schedules in UTC, and its shortest allowed interval is every 5 minutes. A Kubernetes CronJob uses the same five fields and lets you set a time zone on newer versions. A classic crontab uses the time zone of the machine. Special strings such as @daily are accepted by many crontab implementations but not by every scheduler, so prefer the five-field form when in doubt.

### What does a step like */15 or 10/20 mean?

A step picks every nth value in a range. In the minute field, */15 means 0, 15, 30 and 45. A start value followed by a step, such as 10/20, runs from that value to the end of the field: minutes 10, 30 and 50. A range with a step, such as 8-18/2 in the hour field, means 8, 10, 12, 14, 16 and 18.

### Can I use names like MON-FRI or JAN?

Yes. The month and day-of-week fields accept three-letter English names in any case. Numbers work too: months run from 1 to 12, and days of the week from 0 to 7, where both 0 and 7 mean Sunday.

### What happens at daylight saving time changes?

It depends on the scheduler. When clocks jump forward, a job set inside the skipped hour may be skipped or run late. When clocks go back, a job set inside the repeated hour may run twice. If a job must run exactly once a day, schedule it in UTC or at a time that is not near the changeover.