Cron Expression Generator

Build cron expressions visually, get a human-readable explanation, and preview upcoming run times.

CronScheduleGeneratePreview

Expression

0 * * * *

At minute 0 of every hour

Next 0 Runs

Calculating…

Times shown in UTC

Quick Reference

*Any value
*/nEvery n units
nSpecific value
n-mRange
n,mList of values
0-6Days: Sun=0, Sat=6
1-12Months: Jan=1
0-59Minutes range

All processing happens locally in your browser — your data never leaves your device.

Cron Expression Generator helps you write the five-field schedule strings used by crontab, CI pipelines, Kubernetes CronJobs and most job schedulers. Build the expression field by field or paste an existing one, and the tool shows the resulting string, a short plain-English summary, and the next five times it would fire.

It understands standard five-field syntax: minute, hour, day of month, month and day of week, with * for any value, single numbers, ranges (1-5), comma lists (1,15) and steps (*/10). A six-field expression is also accepted, in which case the first field is treated as seconds and ignored. Named values (MON, JAN) and extensions like ?, L, W and # are not parsed.

The next-run preview assumes the scheduler runs in UTC, as most servers and hosted schedulers do, so 0 8 * * 1-5 fires at 08:00 UTC on weekdays. When both day of month and day of week are set, a run happens when either one matches, which is how standard cron behaves. If your scheduler uses another timezone, shift the times accordingly or use the timestamp converter to check a specific run in another zone.

Twelve presets cover common schedules, from every minute to once a year, and a quick-reference card lists the syntax. Nothing is sent to a server. If the schedule lives in a JSON config (a vercel.json crons entry, for instance), run the file through the JSON formatter after adding it to catch syntax slips.

  1. Start from a preset such as Every weekday 8 AM, or leave the defaults in place.
  2. In Visual Builder, type into each of the five fields or use the shortcut buttons (days of the week, months, common hours and minutes).
  3. To work with an existing schedule, switch to Raw Expression and paste the five-field string.
  4. Read the summary and the Next 5 Runs list to confirm the schedule does what you expect.
  5. Copy the expression with the copy button and paste it into your crontab, workflow file or scheduler config.

  • Visual builder with a text input and shortcut buttons for each of the five fields
  • Raw mode for pasting and checking an existing expression
  • Supports *, single values, ranges, comma lists and */n steps
  • Plain-English summary of the schedule
  • Preview of the next five run times, displayed in UTC
  • 12 presets for common intervals, plus a syntax quick reference
  • Runs locally in the browser

Weekday mornings

0 9 * * 1-5

Minute 0, hour 9, Monday (1) through Friday (5): once each working day at 09:00.

Every 15 minutes

*/15 * * * *

Fires at minutes 0, 15, 30 and 45 of every hour. A typical interval for polling or health checks.

Nightly job at 02:30

30 2 * * *

Once a day at 02:30, a common slot for backups and batch work outside business hours.

Start of each month

0 0 1 * *

Midnight on the 1st of every month, often used for billing runs or monthly reports.

Specific weekdays

0 18 * * 1,3,5

At 18:00 on Monday, Wednesday and Friday.

Fewer than five runs are listed

The preview scans about a year ahead, so yearly schedules or rare combinations (a specific date that must also be a specific weekday) may have fewer matches.

This does not mean the expression is invalid; it just fires rarely.

Using 7 for Sunday gives no runs

Some cron implementations accept 7 as Sunday, but this tool only recognises 0-6.

Use 0 for Sunday, and 0-6 or 1-5 for weekday ranges.

Job runs hours earlier or later than expected

Your server evaluates cron in its own timezone (usually UTC), while you planned the schedule in local time.

Convert the intended local time to the server's timezone before building the expression, or set the scheduler's timezone explicitly.

Day names or month names are not understood

Only numeric values are parsed, so MON-FRI or JAN is not matched.

Replace names with numbers: 1-5 for Monday to Friday, 1 for January.

What do the five cron fields mean?

From left to right: minute (0-59), hour (0-23), day of month (1-31), month (1-12) and day of week (0-6, where 0 is Sunday). An asterisk means every value of that field, so 0 * * * * runs at minute 0 of every hour.

Which timezone are the next runs in?

In UTC. The expression is evaluated as if the scheduler runs in UTC, so 0 9 * * * is listed as 09:00 UTC wherever you are. If your scheduler uses a different timezone (for example via CRON_TZ, or the timeZone field on a Kubernetes CronJob), shift the listed times by that offset.

How do step values like */5 work?

*/n means every n units. In the minute and hour fields, */5 or */2 match values divisible by n, starting at 0. Standard cron counts steps from the start of the field's range, so */2 in the day-of-month field means the 1st, 3rd, 5th and so on. The preview here tests divisibility, so confirm day-of-month and month steps against your scheduler's documentation.

Can I combine ranges and lists, like 1-5,10?

Not in this tool. Each field accepts one form: a single value, a range, a comma list or a */n step. Combinations such as 1-5,10 or 0-30/5 are valid in many cron implementations but will not be previewed correctly here.

What happens if I set both day of month and day of week?

In classic Vixie cron, a job runs when either field matches. This preview requires both to match, so 0 0 1 * 1 is shown as running only when the 1st falls on a Monday. Check which behaviour your scheduler uses; most follow the either-or rule.

Does the tool check that my values are in range?

It checks that there are five (or six) fields, but it does not reject out-of-range numbers. An impossible value such as minute 75 never matches, so no upcoming runs appear.