Crontab Translator
Translate a 5-field cron expression into plain English and see the next 5 run times: 0 9-17 * * 1-5 runs hourly from 9 AM to 5 PM, Monday to Friday. How it works
Use the Crontab Translator
Five fields: minute, hour, day of month, month, day of week (or an alias such as @daily). Up to 200 characters; a seconds field is not supported.
Schedule Description
Runs every minute
Field Breakdown
*every minute*every hour*every day of the month*every month*every day of the weekNext 5 Runs
Calculating the next runs…
About the Crontab Translator
The cron expression 0 9-17 * * 1-5 runs on the hour, every hour from 9 AM through 5 PM, Monday through Friday: 9 runs a day. A crontab line has five fields, minute, hour, day of month, month and day of week, and this crontab translator writes them as one sentence, explains each field and lists the next 5 run times.
Common cron expressions in plain English
| Cron expression | What the translator says |
|---|---|
| * * * * * | Runs every minute |
| */15 * * * * | Runs every 15 minutes |
| */25 * * * * | Runs every 25 minutes within each hour (at minutes 0, 25 and 50) |
| 0 * * * * | Runs at the start of every hour (minute 0) |
| 0 0 * * * | Runs at 12:00 AM every day |
| 30 9,17 * * * | Runs at 9:30 AM and 5:30 PM every day |
| 0 9 * * 1-5 | Runs at 9:00 AM on Monday through Friday |
| 0 9-17 * * 1-5 | Runs on the hour, every hour from 9 AM through 5 PM on Monday through Friday |
| */5 9-17 * * 1-5 | Runs every 5 minutes from 9:00 AM through 5:59 PM on Monday through Friday |
| 0 */6 * * * | Runs at 12:00 AM, 6:00 AM, 12:00 PM and 6:00 PM every day |
| 0 2 * * 0 | Runs at 2:00 AM on Sunday |
| 0 0 1 * * | Runs at 12:00 AM on day 1 of the month |
| 0 0 1 1,4,7,10 * | Runs at 12:00 AM on day 1 of the month in January, April, July and October |
| 0 0 L * * | Runs at 12:00 AM on the last day of the month |
| 0 0 * * 5L | Runs at 12:00 AM on the last Friday of the month |
| 0 9 * * 1#1 | Runs at 9:00 AM on the 1st Monday of the month |
| 0 0 13 * 5 | Runs at 12:00 AM on day 13 of the month, or on Friday |
The fields are minute, hour, day of month, month and day of week; 0 and 7 both mean Sunday. L, 5L and 1#1 are extensions that the POSIX and cronie crontab pages do not describe, so check that your scheduler accepts them.
Cron aliases such as @daily and @hourly
| Alias | Same as | What the translator says |
|---|---|---|
| @yearly | 0 0 1 1 * | Runs at 12:00 AM on day 1 of the month in January |
| @monthly | 0 0 1 * * | Runs at 12:00 AM on day 1 of the month |
| @weekly | 0 0 * * 0 | Runs at 12:00 AM on Sunday |
| @daily | 0 0 * * * | Runs at 12:00 AM every day |
| @hourly | 0 * * * * | Runs at the start of every hour (minute 0) |
@annually is the same as @yearly and @midnight the same as @daily. @reboot is not a schedule: it runs once when the system starts, and the translator says so instead of translating it.
Expressions the translator rejects, and its message
| Expression | Message |
|---|---|
| @reboot | @reboot runs once when the system starts. It has no repeating schedule to translate. |
| 0 0 0 * * * | A crontab line has exactly 5 fields (minute hour day-of-month month day-of-week) but this has 6. A sixth field (seconds, as in Quartz or Spring) is not supported here. |
| 0 0 15W * * | Day of month: "W" (nearest weekday) is a Quartz extension that this tool does not accept. |
| 0 0 31 4 * | That day of the month never occurs in the chosen month (for example 31 April or 30 February). |
| */100 * * * * | Minute: the step 100 is larger than the 60 values this field has. |
| 0 0 * * 1#6 | Day of week: "1#6": the occurrence after # must be 1 to 5. |
How to use this tool
- Paste a crontab line such as 0 9-17 * * 1-5, or an alias such as @daily, into Cron Expression. To start from a common schedule instead, switch to Build and pick one of the 10 quick presets.
- To change one field, tap its chip under the field, such as Hour: 9-17, and pick a value from its quick picks (9 AM to 5 PM, Every 6 hours and so on). The pick replaces that field only.
- Read the sentence and the Field Breakdown, then set the time zone your server uses and check the next 5 runs.
Frequently asked questions
- What does * * * * * mean in cron?
- Every minute of every hour of every day: the translator says “Runs every minute”, which is 1,440 runs a day. Each * means every value of its field.
- How do I write a cron job that runs every 15 minutes?
- Use */15 * * * *, which fires at minutes 0, 15, 30 and 45 of every hour. A step that does not divide 60 restarts each hour: */25 * * * * runs at minutes 0, 25 and 50, so the gap from :50 to the next :00 is 10 minutes.
- Why does my cron job run on extra days when I set both day of month and day of week?
- When both day fields are restricted, cron runs on days that match either one, as POSIX and the cronie crontab page both say. 0 0 13 * 5 runs at midnight on the 13th and on every Friday: from 1 October 2026 the next runs are 2, 9, 13 and 16 October. When one of the two fields starts with *, such as */2, cron versions differ, and the translator adds a note.
- Can a cron expression have seconds?
- Not in a crontab: the POSIX and cronie formats have five fields, so the smallest step is one minute. Six-field expressions with a seconds field come from other schedulers and libraries, such as the cron-parser library behind the run list. The translator rejects a sixth field with a message rather than guessing which field you meant.
- What does @daily mean in crontab?
- @daily is shorthand for 0 0 * * *: once a day at 12:00 AM. @hourly is 0 * * * *, @weekly is 0 0 * * 0 (Sunday at midnight), @monthly is 0 0 1 * * and @yearly is 0 0 1 1 *, as the cronie crontab manual lists them.
- What time zone are the next run times in?
- UTC unless you pick one of the other 12 zones in the list, such as America/New_York or Asia/Kolkata. Pick the zone your server’s cron uses to see the times it will really run.
Related Tools
View all toolsJSON Formatter
Paste JSON to format it with 2 spaces, 4 spaces or tabs, minify it or sort its keys. A syntax error is reported with its line, column and a caret under it.
JSON Path Query Tool
Test a JSONPath expression on your JSON and see the match count, each matching value and its path. Filters such as ?(@.price < 10) work. Up to 100 KB.
Base64 Converter
Encode text to Base64 or decode Base64 to text. UTF-8, standard and URL-safe alphabets, optional padding on decode, up to 250,000 characters.
URL Encoder/Decoder
Percent-encode or decode text as you type: one value with encodeURIComponent or a whole URL with encodeURI, and an option to read + as a space.
UUID Generator
Generate 1 to 1,000 random v4 UUIDs, or time-based v1, or name-based v5 and v3 from a namespace and a name, and copy them. Repeats of v4 are very unlikely.
ULID Generator
Generate 1 to 500 ULIDs, 26-character IDs that sort by creation time, in upper or lower case, and decode any ULID to the date it was made.