Developer Tools calculator

Free cron expression explainer

Paste a cron expression and this explainer translates it into plain English — turning a line like 0 9 * * 1-5 into '9:00 AM, Monday–Friday' — and lists the next run times, updated live, as you type.

InputsLive
Tool
Cron expression
Result
Cron
Every day at 9:00
Result generated client-side
Output

Output is generated client-side in your browser. No data is transmitted to any server.

Results are estimates. Consult a professional.

What it does

What a cron expression is and what this tool does

A cron expression is a short string of five fields that tells a scheduler when to run a job — once a minute, every weekday at 9 AM, at midnight on the first of the month, and almost any pattern in between. The syntax is terse on purpose: a line like 0 9 * * 1-5 packs a whole weekly schedule into nine characters. The trade-off is that it is hard to read at a glance, which is exactly the problem this cron expression explainer solves.

Paste an expression above and the tool does two things. First it translates the schedule into plain English0 9 * * 1-5 becomes "at 9:00 AM, Monday through Friday." Then it lists the next run times so you can confirm the schedule fires when you expect. Nothing is scheduled and no job is run; the tool only reads and describes the expression, updated live as you type.

Reads the schedule — it does not run it
This tool parses and explains an expression. It does not install a crontab, trigger a job, or contact a server. Use it to check what a schedule means before you paste it into your real scheduler.
The five fields

The 5-field cron expression structure

A standard cron expression is five fields separated by single spaces, read left to right: minute, hour, day of month, month, and day of week. Each field accepts a number within its own range, or one of the special characters in the next section. The expression matches when the current time satisfies every field at once.

┌───────── minute (0-59)
│ ┌─────── hour (0-23)
│ │ ┌───── day of month (1-31)
│ │ │ ┌─── month (1-12)
│ │ │ │ ┌─ day of week (0-6, Sun=0)
│ │ │ │ │
* * * * *
PositionFieldAllowed valuesAlso accepts
1Minute0–59* , - /
2Hour0–23* , - /
3Day of month1–31* , - / (L W ?)
4Month1–12* , - / and JAN–DEC names
5Day of week0–6 (Sun=0)* , - / and SUN–SAT names (# L ?)

Field order and ranges per the POSIX crontab specification. Parenthesised characters (L, W, #, ?) are extensions found in Quartz and some other schedulers, not in standard Unix cron.

The five fields, their ranges, and the rule that the day-of-month and day-of-week fields are treated as a logical OR are defined in the POSIX crontab specification (IEEE Std 1003.1, "crontab").
Special characters

Cron special characters: * , - and /

Four characters do almost all the work in a cron expression. They let one field stand for "any value," a list of values, a continuous range, or a repeating step. Learn these four and you can read the large majority of schedules you will meet.

CharacterNameMeansExample
*AsteriskEvery value in the field* in the hour field = every hour
,CommaA list of specific values0,30 in minutes = at :00 and :30
-HyphenAn inclusive range1-5 in day-of-week = Mon–Fri
/SlashA step within a range or **/15 in minutes = every 15 minutes

The four portable special characters defined for standard Unix cron. They can be combined — for example 0-30/10 means 0, 10, 20, 30.

Some schedulers add more. The question mark ? means "no specific value" and is used in Quartz to resolve the day-of-month / day-of-week clash (you set one field and put ? in the other). L means "last" — the last day of the month, or the last given weekday. W means the nearest weekday to a date, and # picks the nth weekday of the month (6#2 = the second occurrence, where the weekday number follows that scheduler's own day-of-week numbering — in Quartz, where Sunday = 1, 6 is Friday). These are extensions, not part of standard cron, so confirm your scheduler supports them before relying on them.

Slash steps start at the field minimum
*/15 in the minute field means 0, 15, 30, 45 — it steps from 0, the lowest value, not from "now." Likewise */2 in the hour field is the even hours (0, 2, 4, …), not "every 2 hours starting whenever the job was added."
Worked examples

Cron expression examples, decoded

Example: 0 9 * * 1-5

Take the common "weekday morning" schedule 0 9 * * 1-5 and read it field by field, the way the tool does.

Read each field left to right

  • Minute = 0 — at the top of the hour.
  • Hour = 9 — the 9 o'clock hour, so 9:00.
  • Day of month = * — any day of the month.
  • Month = * — every month.
  • Day of week = 1-5 — Monday through Friday (1=Mon … 5=Fri).

Put together, the tool reports at 9:00 AM, Monday through Friday — and lists the next several weekday mornings as the upcoming run times.

Two more you will see constantly

*/15 * * * * uses a step in the minute field: minute = every 15 (0, 15, 30, 45), every hour, every day — so every 15 minutes. And 0 0 1 * * sets minute 0, hour 0 and day-of-month 1, which is midnight on the 1st of every month — a classic monthly billing or report job.

0 9 * * 1-5 → "9:00 AM, Mon–Fri"
Change any field and the English changes with it: swap 1-5 for 6,0 and it becomes "9:00 AM on Saturday and Sunday." The explainer re-reads the whole expression on every keystroke.
Quick reference

Common cron schedules reference table

Most real jobs reuse a handful of patterns. This table maps the expressions you will write most often to what they mean, so you can copy a starting point and adjust one field.

ExpressionRuns
* * * * *Every minute
*/5 * * * *Every 5 minutes
*/15 * * * *Every 15 minutes
0 * * * *Every hour, on the hour
0 0 * * *Every day at midnight
0 9 * * 1-59:00 AM, Monday–Friday
0 0 * * 0Midnight every Sunday
0 0 1 * *Midnight on the 1st of every month
0 0 1 1 *Midnight on 1 January (yearly)
30 2 * * 62:30 AM every Saturday

Standard 5-field cron. In the day-of-week column, 0 = Sunday and 1–5 = Monday–Friday, per the POSIX crontab field ranges.

Where it's used

What cron expressions are used for

Cron is the default way to say "run this on a schedule" across the software world. Anywhere a task needs to repeat on a clock rather than in response to an event, a cron expression usually defines the timing.

  • Cron jobs on servers — the original use: the Unix cron daemon reads a crontab and runs backups, log rotation, cache warming and maintenance scripts on schedule.
  • Scheduled tasks in apps — frameworks such as Spring, Quartz, Celery, Kubernetes CronJobs and serverless platforms accept cron expressions to fire background work, emails and report generation.
  • CI/CD pipelines — GitHub Actions, GitLab CI and Jenkins use cron syntax to run nightly builds, scheduled tests and dependency scans (for example 0 0 * * * for a nightly job).
  • Data and billing jobs — hourly syncs, daily ETL runs and monthly invoicing (0 0 1 * *) are all expressed as cron schedules.

If you are wiring up other parts of a job — encoding a token, generating an ID for the run, or testing a pattern that parses its output — the rest of our developer tools, including the regex tester, sit alongside this one.

Common mistakes

Cron gotchas: day-of-week, time zones, and 6-field syntax

Cron is simple until three things trip you up. Each one is a source of jobs that silently run too often, at the wrong time, or not at all — so they are worth understanding before you trust a schedule in production.

Day-of-month and day-of-week are OR, not AND

This is the classic surprise. When both the day-of-month and the day-of-week fields are restricted (neither is *), standard cron fires when either matches, not only when both do. So 0 0 13 * 5 runs at midnight on the 13th of the month and on every Friday — not only on Friday the 13th. To pin a single condition, leave the other field as *.

The POSIX crontab specification states that when day-of-month and day-of-week are both restricted, the command runs when either field matches the current time.

Time zone — cron runs in the server's clock

An expression has no time zone of its own. Classic Unix cron runs in the system's local time, while many cloud schedulers (GitHub Actions, AWS EventBridge) run in UTC. The same 0 9 * * * fires at 9 AM in whatever zone the scheduler uses — which may not be your 9 AM. Daylight-saving shifts can also make a daily job run twice or skip a run. Always confirm the scheduler's zone, and prefer UTC for jobs that must not drift.

5-field cron vs 6-field (seconds) syntax

Standard Unix cron has five fields and the smallest unit is one minute. Quartz, Spring and some others add a leading seconds field for six, and Quartz also numbers the days of the week 1–7 (Sunday = 1) instead of 0–6. Paste a 6-field Quartz expression into a 5-field parser and every field shifts by one — so this tool reads the standard 5-field form. If your scheduler expects seconds, account for the extra field.

Match the variant your scheduler uses
Before relying on an expression, confirm three things: how many fields it expects (5 or 6), whether day-of-week starts at 0 or 1, and which time zone it runs in. Those three differences cause most "my cron job didn't fire" reports.
Accuracy

How accurate is this cron expression explainer?

The parsing is exact for standard 5-field cron. The tool reads each field against the POSIX ranges — minute 0–59, hour 0–23, day of month 1–31, month 1–12, day of week 0–6 — expands the special characters * , - and /, and describes the resulting schedule. The next-run times are computed by stepping the clock forward and testing the same fields, so the English description and the upcoming runs always agree.

What it cannot know is your scheduler's variant and clock. It explains the standard 5-field form in the scheduler's own time zone; it does not assume UTC, parse a 6-field Quartz expression, or model daylight-saving edge cases. Treat the plain-English reading as the meaning of the expression, then confirm the field count, day-of-week base, and time zone against your scheduler's documentation. For another browser-based dev utility, see our regex tester.

Field definitions, ranges, and the day-of-month / day-of-week OR rule follow the POSIX crontab specification (The Open Group Base Specifications, "crontab").
Questions

Frequently asked questions about the free cron expression explainer

A cron expression calculator is a free online tool that helps you parse and explain a standard 5-field cron expression in plain English. Cron schedules use 5 space-separated fields: minute, hour, day-of-month, month, day-of-week. Wildcards * and steps */N help. It runs entirely in your browser with instant results and no sign-up.
POSIX cron uses 5 fields starting at minutes. Quartz and Spring extend to 6 (adding seconds) and accept day-of-week 1-7 instead of 0-6. Always check your scheduler's docs.
Sunday. The week is 0=Sun, 1=Mon, ..., 6=Sat. Some implementations also accept 7 for Sunday.
Different schedulers handle this differently. POSIX cron OR-combines them. Quartz makes one of them mandatory (* for the other).
About

About this Cron Expression explainer

This cron expression explainer runs entirely in your browser — the expression you type is never sent anywhere or stored. It parses the standard 5-field syntax (minute, hour, day of month, month, day of week), translates it to plain English, and lists the next run times the moment you change a field. It reads the schedule only; it never installs a crontab or runs a job.

It is one of our free developer tools; browse the full set on the calculators index.

Want a calculator built for your business?

Customize any of our 400+ tools to match your brand, or commission a new one tailored to how your business actually calculates — pricing, payroll, quotes, anything. Deployed on your domain, math runs in your visitors' browsers.