Plain-English description
Every expression you type or build is read back as a sentence, so you can check it says what you meant before it goes on a server.
*/15 9-17 * * 1-5ResultEvery 15 minutes, between 09:00 and 17:59, on Monday through FridayBuild a cron schedule one field at a time, or paste an expression to see what it means in plain English. Check the next run times in any time zone, then copy it for crontab, GitHub Actions, or Kubernetes. Everything runs in your browser.
At 09:00, on Monday through Friday
Matches minute 0
Working out the run times...
# At 09:00, on Monday through Friday 0 9 * * 1-5 /path/to/command
Run crontab -e and add this line, with your own command in place of /path/to/command. Cron reads the schedule in the server's time zone.
A cron expression is a short line of five fields that tells a scheduler when to run a job. The fields are the minute, hour, day of the month, month, and day of the week, in that order. The name comes from cron, the program that runs scheduled tasks on Linux and other Unix systems.
The same format is used well beyond Linux servers. GitHub Actions, Kubernetes CronJobs, and many hosting platforms read it too. It is compact, but easy to get wrong, which is why this tool writes each expression back as a sentence and lists the times it will run.
A cron expression is five fields separated by spaces. Each one limits when the job can run, and the job runs at every minute that matches all of them. Times use the 24-hour clock.
| Field | Allowed values | Example |
|---|---|---|
| Minute | 0 to 59 | 30 |
| Hour | 0 to 23 | 9 |
| Day of month | 1 to 31 | 1 |
| Month | 1 to 12, or JAN to DEC | JAN |
| Day of week | 0 to 7, or SUN to SAT (0 and 7 are both Sunday) | 1-5 |
Inside a field, four characters let you match more than one value:
| Character | Meaning | Example |
|---|---|---|
* | Any value | * * * * * runs every minute |
, | A list of values | 0 9,17 * * * runs at 09:00 and 17:00 |
- | A range of values | 0 9 * * 1-5 runs Monday through Friday |
/ | A step through a range | */10 * * * * runs every 10 minutes |
These cover most of the schedules people need. Paste any of them into the tool to see its next run times.
| Expression | Runs |
|---|---|
| * * * * * | Every minute |
| */5 * * * * | Every 5 minutes |
| 0 * * * * | At the start of every hour |
| 0 */6 * * * | At 00:00, 06:00, 12:00, and 18:00 every day |
| 0 0 * * * | Every day at midnight |
| 30 2 * * * | Every day at 02:30 |
| 0 9 * * 1-5 | At 09:00, Monday through Friday |
| */15 9-17 * * 1-5 | Every 15 minutes during work hours on weekdays |
| 0 12 * * 6,0 | At 12:00 on Saturday and Sunday |
| 0 0 * * 0 | Every Sunday at midnight |
| 0 0 1 * * | At midnight on the first of every month |
| 0 0 1 */3 * | At midnight on January 1, April 1, July 1, and October 1 |
| 0 0 1 1 * | Once a year, at midnight on January 1 |
Every expression you type or build is read back as a sentence, so you can check it says what you meant before it goes on a server.
*/15 9-17 * * 1-5ResultEvery 15 minutes, between 09:00 and 17:59, on Monday through FridayEdit one field at a time. Choose every value, every N, specific values from a grid, or a range, and the expression updates as you click.
Hour: specific hours 9 and 17Result0 9,17 * * *See the next 10 times the schedule runs, in your own time zone or any other. Daylight Saving Time is taken into account.
0 9 * * 1ResultMon, Oct 19, 2026, 09:00Copy the expression on its own, as a crontab line, as a GitHub Actions schedule, or inside a Kubernetes CronJob with the time zone set.
0 0 * * *Result- cron: "0 0 * * *"This rule surprises a lot of people. When both day fields are set to something other than *, cron runs the job on days that match either field, not only days that match both.
0 0 13 * 5 runs on the 13th of every month and on every Friday. It does not mean "Friday the 13th".0 0 1 * 1 runs on the 1st of every month and on every Monday.0 0 */2 * 1 is the exception. When one of the fields starts with *, both have to match, so this runs only on odd-numbered days that are also Mondays.This is how Vixie cron and cronie, the cron programs on most Linux systems, behave, and this tool follows the same rule in its description and run times. To run a job only on a date that is also a certain weekday, schedule it on the weekday and check the date inside the script.
Many tools say they use cron, but not all of them read the same format. This generator writes the standard five-field format. Here is how other systems differ:
| System | Fields | What to know |
|---|---|---|
| crontab (Linux, macOS) | 5 | The standard format. Also accepts shortcuts like @daily. |
| GitHub Actions | 5 | Runs at most once every 5 minutes, and runs can start late when GitHub is busy. |
| Kubernetes CronJob | 5 | Standard format plus shortcuts like @hourly. The timeZone field sets the zone in version 1.27 and newer. |
| Spring @Scheduled | 6 | Adds a seconds field at the start. |
| Quartz Scheduler | 6 or 7 | Seconds first and an optional year last. One day field must be ?, and days of the week are 1 to 7 with Sunday as 1. |
| AWS EventBridge | 6 | Adds a year field at the end. One day field must be ?, and days of the week are 1 to 7 with Sunday as 1. |
To move an expression from this tool to Spring or Quartz, add 0 at the start for the seconds. For Quartz and EventBridge, also replace the* in one of the day fields with ?, and write weekdays as names (MON-FRI) so the different numbering does not matter.