Vibe Engines
YouTube

Vibe Engines is free, interactive AI engineering & system design — runs in your browser. Pick a learning path

Cron Expression Builder

A cron expression builder and decoder. Type a five-field cron schedule and instantly get a plain-English description plus the next several times it would fire, or start from a common preset. Supports ranges, lists and step values, and explains what each of the five fields means — all computed in your browser.

minhourdommondow

At 02:30.

Next runs

  • Oct 24, 2026, 2:30 AM
  • Oct 25, 2026, 2:30 AM
  • Oct 26, 2026, 2:30 AM
  • Oct 27, 2026, 2:30 AM
  • Oct 28, 2026, 2:30 AM
  • Oct 29, 2026, 2:30 AM

Cron is a five-field sentence that says when to do something. Each field holds a value, a wildcard or a small pattern, and a job fires in any minute where the clock matches all of them. This builder checks the expression, rewrites it in English and lists the next runs, so you can see the schedule instead of trusting it.

What it computes

30 2 * * *
│  │ │ │ └─ day of week   0–6, 0 = Sunday
│  │ │ └─── month         1–12
│  │ └───── day of month  1–31
│  └─────── hour          0–23
└────────── minute        0–59
  • * means every value, a-b is a range, a,b is a list, and /n steps through a range or an asterisk, so */15 is 0, 15, 30, 45.
  • Each field is expanded into the set of values it allows. Anything outside the field’s range, a malformed step or the wrong number of fields produces an error naming the bad field.
  • A minute matches when its minute, hour and month are in their sets and its day passes the day rule. If both day fields are restricted, a day passes when either matches; otherwise both must.
  • To list runs, the tool starts at the next whole minute, steps forward one minute at a time and keeps the first six matches found within 366 days. If there are none, it says so.

A worked example

The default is 30 2 * * *. The minute field allows only 30, the hour field only 2, and the three remaining fields are wildcards, so the day rule passes every day. Both time fields are plain numbers, so the description is the short form: At 02:30.

Opened at 10:00 AM on October 22, 2026, the run list shows 2:30 AM on October 23 and the five days after it, formatted in your browser’s locale and time zone. A few more expressions show how the rules play out:

ExpressionDescription shownWhat actually runs
30 9 * * 1-5At 09:30, on Monday through Friday.Weekdays at 09:30
0 9-17/2 * * 1-5At minute 0, every 2 hour starting hour 9, on Monday through Friday.09:00, 11:00, 13:00, 15:00, 17:00 on weekdays
0 0 13 * 5At 00:00, on the 13th, on Friday.Midnight on every Friday and on every 13th
0 12 1 1,4,7,10 *At 12:00, on the 1st, in Jan, Apr, Jul, Oct.Noon on the first day of each quarter, so only four runs a year

The third row is the OR rule in action. Its run list starts with the next Friday rather than the next Friday the 13th, which is the fastest way to catch the mistake.

Assumptions and limits

  • Five numeric fields only. Month and weekday names such as JAN or MON, 7 for Sunday, macros like @daily, and the seconds or year fields some schedulers add are rejected.
  • Steps need a range or an asterisk. A single value with a step, such as 5/15, matches only that value here, minute 5, so write 5-59/15 for “every 15 minutes from 5”.
  • Local time, minute by minute. Runs are listed in your browser’s time zone. On a daylight-saving spring-forward night, 02:30 does not exist and the preview skips it; cron daemons differ in how they handle skipped and repeated hours.
  • No extensions. Quartz-style L, W, # and ? are not supported.

How to use the result

  • Read the run list, not just the sentence. If the first six runs are not what you expected, the expression is wrong, whatever the description says.
  • Avoid 01:00 to 03:00 local for daily jobs on servers that observe daylight saving, or schedule in UTC, so a job is never skipped or doubled.
  • Spread load. Thousands of jobs set to 0 0 * * * all start at once. Offset minutes, such as 17 3 * * *, to avoid a midnight spike.
  • Make jobs safe to re-run, because missed or repeated runs happen after restarts and clock changes.

How it works

  • Decodes a five-field cron expression into plain English.
  • Lists the next six run times, searching up to a year ahead, in local time.
  • Supports *, ranges (1-5), lists (0,30) and steps (*/15, 9-17/2).
  • Presets for every minute, hourly, daily, weekdays, weekly, monthly and every 15 minutes.

Frequently asked questions

What are the five cron fields?

A standard cron expression has five space-separated fields, in order: 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 for that field. So 30 2 * * * is minute 30, hour 2, every day of every month, which is 02:30 daily. This tool validates each field against those ranges and turns the whole expression into a sentence plus a list of upcoming runs.

What do *, /, - and , mean in cron?

An asterisk matches every value. A hyphen is a range: 1-5 in the day-of-week field means Monday through Friday. A comma is a list: 0,30 in the minute field means on the hour and at half past. A slash adds a step to a range or an asterisk: */15 in the minute field means minutes 0, 15, 30 and 45, and 9-17/2 in the hour field means 9, 11, 13, 15 and 17. Operators combine, as in 0,30 9-17 * * 1-5.

How is day of month combined with day of week?

This is the classic cron gotcha. When both the day-of-month and day-of-week fields are restricted, standard cron treats them as OR, not AND: the job runs if either matches. So 0 0 13 * 5 fires at midnight on the 13th of every month and also on every Friday, not only on Friday the 13th. If you need both conditions at once, schedule on one of them and check the other inside the job.

How do I run a cron job every 15 minutes?

Use */15 * * * *, which fires at minutes 0, 15, 30 and 45 of every hour. To run every 15 minutes only during business hours on weekdays, restrict the other fields: */15 9-17 * * 1-5 runs from 09:00 to 17:45, Monday to Friday. Steps count from the start of the range, so */7 in the minute field runs at 0, 7 and so on up to 56, then again at 0, which leaves a 4-minute gap at the top of each hour.

Does this account for time zones and daylight saving?

The next-run times are computed in your browser’s local time zone. A real cron daemon uses the time zone of the server or the scheduler, often UTC, so the same expression can fire at a different local time. Daylight-saving changes can also skip or repeat a run: 02:30 does not exist on the spring-forward night in much of the US, and this preview simply skips that day. Pin the time zone where the job runs, and prefer UTC for servers.