What is a cron expression?
A cron expression is a schedule written as five fields: minute, hour, day of month, month, and day of week. Cron uses it to run recurring tasks on Unix systems, and CI/CD pipelines and cloud schedulers use the same format. This parser reads standard cron as Vixie cron and cronie do, explains it in plain English, breaks down each field, and lists the next run times in your local time or UTC, including how daylight-saving changes move them. Some schedulers, such as Quartz and AWS EventBridge, use six or seven fields; those formats get a message instead.
The five fields
From left to right the fields are minute (0–59), hour (0–23), day of month (1–31), month (1–12, or JAN–DEC), and day of week (0–7, where 0 and 7 are Sunday, or SUN–SAT). Names work in any case, and in ranges and lists, such as mon-fri or jan,jul.
A star means every value, a comma lists several (1,15), a hyphen gives a range (1-5), and a slash sets a step after a star or a range, so */15 in the minute field means every fifteen minutes and 0-30/10 means minutes 0, 10, 20, and 30.
Day of month and day of week together
When both day fields are restricted, which means neither starts with *, a job runs on days that match either field, not both. So 0 0 1-7 * 1 runs at midnight on each of the first seven days of the month and on every Monday, not only on the first Monday. When either field starts with *, both must match, so 0 0 * * 1 runs only on Mondays.
Shortcuts and random values
Cron also accepts shortcuts: @hourly, @daily (or @midnight), @weekly, @monthly, @yearly (or @annually), and @reboot, which runs once when the cron daemon starts. cronie matches them exactly, so they must be lowercase.
cronie also supports random values written with a tilde: 6~15 in the minute field picks one minute from 6 to 15, and ~ alone picks any value in the field's range. The value is picked when cron loads the crontab and stays the same until it's reloaded, so this parser explains the schedule but can't list exact run times.
Daylight saving time
In local time, a daylight-saving change can skip or repeat an hour. cronie handles it like this: when the clock jumps forward, a job with a fixed minute and hour that fell in the skipped time runs right after the jump (30 2 * * * runs at 03:00 that day where the clock jumps from 02:00 to 03:00), and a job whose minute or hour starts with * doesn't run for the skipped time. When the clock goes back, the repeated hour runs only jobs whose minute or hour starts with *, so a fixed-time job doesn't run twice. The run times here follow these rules and mark the runs a change affects. Schedulers that run in UTC have no daylight-saving changes.
Testing before you deploy
The safest way to trust a schedule is to read its plain-English description and check the next few run times before deploying. A single wrong field can turn 'daily at midnight' into 'every minute', so confirming the upcoming runs match your intent prevents a job from silently overloading a system.
How to read a cron expression
- 1Enter the expression. Type or paste a five-field cron expression such as 0 9 * * 1, a shortcut such as @daily, or pick one of the common presets.
- 2Read the description. A plain-English description of the schedule and a field-by-field breakdown appear as you type. If a field is wrong, the message says which one and why.
- 3Check the next runs. Review the next 10 run times, in your local time or in UTC, to confirm the schedule is what you intended. Runs moved or repeated by a daylight-saving change are marked.
Examples
Every weekday at 9am
Input
0 9 * * 1-5
Output
At 09:00, on Monday through Friday
Every 15 minutes
Input
*/15 * * * *
Output
Every 15 minutes
First of the month
Input
0 0 1 * *
Output
At 00:00, on the 1st of the month
Day names in a list
Input
0 0 * * mon,wed,fri
Output
At 00:00, on Monday, Wednesday, and Friday
Both day fields restricted
Runs when either day field matches.
Input
0 0 1-7 * 1
Output
At 00:00, on the 1st through the 7th of the month or on Monday
A shortcut
Input
@weekly
Output
At 00:00, on Sunday (0 0 * * 0)
A random minute (cronie)
Picked when cron loads the crontab, so run times can't be listed.
Input
6~15 * * * *
Output
A random minute from 6 through 15 past the hour, every hour
Cron fields and symbols
The five fields and what the symbols mean.
| Field / symbol | Meaning |
|---|---|
| Minute | 0–59 |
| Hour | 0–23 |
| Day of month | 1–31 |
| Month | 1–12 or JAN–DEC |
| Day of week | 0–7 (0 and 7 = Sunday) or SUN–SAT |
| * | Every value |
| a,b | List |
| a-b | Range |
| */n or a-b/n | Every n (step) |
| a~b | Random value from a to b (cronie) |
| @daily, @hourly, … | Shortcuts (lowercase) |
Frequently asked questions
What do the five fields mean?
In order: minute, hour, day of month, month, and day of week. Each accepts a number, a range, a list, a step, or a star for every value; month and day of week also accept three-letter names such as JAN and MON.
What does an asterisk mean?
A star matches every value for that field. Five stars, * * * * *, means run every minute.
How do I run a job every N minutes?
Use a step in the minute field: */15 * * * * runs every fifteen minutes, and */5 every five. A step must follow a star or a range, so 5/15 isn't valid; write 5-59/15 to start at minute 5.
How do day of month and day of week interact?
When both are restricted (neither starts with *), the job runs when either field matches, which can cause more runs than expected: 0 0 1-7 * 1 runs on the first seven days of every month and on every Monday. When either field starts with *, both must match.
What happens around daylight-saving changes?
In local time, cronie runs a fixed-time job that falls in an hour skipped by the clock jumping forward right after the jump, and skips the jump for jobs whose minute or hour starts with *. When the clock goes back, only those wildcard jobs run again in the repeated hour. The run times here follow these rules and mark the affected runs.
Why can't it list run times for 6~15?
A tilde is cronie's random syntax: cron picks one value in the range when it loads the crontab and keeps it until the crontab is reloaded, so the exact minute isn't known in advance. The description still explains the range.
Do cron times use UTC or local time?
It depends on the server or scheduler running the job. Many run in UTC, so always confirm the timezone of the system that will execute the expression, and switch the run times here between your local time and UTC to match.
Is my expression sent anywhere?
No. Parsing happens in your browser. The only exception is the Share link button, which uploads the current output when you click it.
Is it free?
Yes — free with no limits.