โฐ Cron to Text: Crontab Expression Translator and Explainer
By Shihab Mia ยท Updated 2026-07-04
Order: minute hour day-of-month month day-of-week. Try 0 9 * * 1-5 or */15 * * * *.
| Field | Value | Allowed | Meaning |
|---|
Cron to text turns a compact crontab line like 0 9 1-5 into a plain English sentence: at 09:00, Monday through Friday. Paste any standard 5-field cron expression here and this tool describes it in one readable line, then breaks it down field by field so you can see exactly what each number and symbol means. Everything runs in your browser, so nothing you type is uploaded or stored.
What is the Cron Expression to Text?
Cron is the time-based job scheduler built into Unix and Linux, and its cron to text syntax has become a de facto standard far beyond cron itself. CI pipelines, container orchestrators like Kubernetes, serverless platforms and many application frameworks all accept the same five-field expression. Reading one at a glance is hard, which is exactly what a cron to text translator solves: it converts the terse syntax into words a human can verify before trusting it in production. A standard expression has five fields separated by single spaces, in this fixed order: minute, hour, day-of-month, month, and day-of-week. The job runs whenever the current time matches every field at once.
Each field accepts four kinds of value, and understanding them is the core of reading any cron schedule. A single number means exactly that value, so 5 in the minute field means minute 5. A star () means every value the field allows. A comma-separated list means any of several values, so 1,15 in day-of-month means the 1st and the 15th. A hyphen range means a span, so 1-5 in day-of-week means Monday through Friday. On top of any of these you can add a step with a slash: /15 in the minute field means every 15 minutes, and 0-30/10 means minutes 0, 10, 20 and 30. Combine these across five fields and you can express almost any recurring schedule.
The field that trips people up most is day-of-week. It runs 0 to 6 where 0 is Sunday, and on many systems 7 is also accepted as Sunday. Most crons also accept three-letter names, so SUN, MON through SAT work in day-of-week and JAN through DEC work in the month field, which often reads more clearly than a number. The other subtle rule is how day-of-month and day-of-week interact: in classic cron, when both are restricted (neither is a star) the job runs when either one matches, not both. That surprises people who write 0 0 13 * 5 expecting Friday the 13th and instead get every 13th plus every Friday.
Some schedulers extend the basic syntax, and a good cron to text reading has to know the limits. Named macros are shorthand strings that start with an @ sign and replace all five fields: @daily and @midnight both mean 0 0 , @hourly means 0 , @weekly means 0 0 0, @monthly means 0 0 1 , @yearly and @annually mean 0 0 1 1 , and @reboot runs once when the system starts. Quartz and Spring style schedulers add a leading seconds field (making six fields) and special characters such as L for the last day, W for the nearest weekday, and # for the nth weekday of the month, as in 6#3 for the third Friday. AWS EventBridge uses its own six-field variant with a required year and a ? placeholder.
This tool focuses on the classic 5-field POSIX cron format because that is what most servers, crontabs and framework schedulers actually run. It parses numbers, stars, lists, ranges and steps and turns them into a clear description, so you can read a cron schedule with confidence, catch a mistake before you deploy, and document what a job really does. One caveat worth remembering across every scheduler: cron does not know your timezone unless you tell it, so a schedule that looks like 2am may fire in UTC or in the server clock, not your local time.
When to use it
- Double-checking a crontab line a colleague wrote before you deploy it to a production server.
- Documenting what a scheduled job does so the code comment matches the actual schedule.
- Learning cron syntax by typing an expression and reading the plain English it produces.
- Debugging a job that fires at the wrong time by inspecting the field-by-field breakdown.
- Reviewing a CI pipeline or Kubernetes CronJob schedule during a code review.
- Migrating jobs between servers and confirming each schedule survived the copy unchanged.
How to use the Cron Expression to Text
- Type or paste a 5-field cron expression into the box, in the order minute hour day-of-month month day-of-week.
- Read the plain English description that appears instantly above the table.
- Check the field-by-field breakdown to confirm each part means what you expect.
- Use a preset button as a starting point, then edit it to match the schedule you need.
- Copy the description into your crontab as a comment so the next person can read the schedule at a glance.
Formula & method
Worked examples
You want to understand the expression 0 9 * * 1-5.
- Field 1 minute = 0, so at the top of the hour.
- Field 2 hour = 9, so 09:00.
- Field 3 day-of-month = *, every day.
- Field 4 month = *, every month.
- Field 5 day-of-week = 1-5, Monday through Friday.
Result: At 09:00, Monday through Friday.
You want to understand the expression */15 * * * *.
- Field 1 minute = */15, a step of 15 over 0-59, so minutes 0, 15, 30 and 45.
- Field 2 hour = *, every hour.
- Fields 3, 4 and 5 are all *, so every day, every month, every weekday.
- Combining a 15-minute step with every hour means it fires 4 times an hour.
Result: Every 15 minutes.
You want to understand the expression 30 2 1 * 0.
- Field 1 minute = 30, at half past.
- Field 2 hour = 2, so 02:30.
- Field 3 day-of-month = 1, the 1st of the month.
- Field 4 month = *, every month.
- Field 5 day-of-week = 0, Sunday. Because both day fields are restricted, classic cron runs when either matches.
Result: At 02:30 on the 1st of every month and on every Sunday.
The five cron fields, in order, with their allowed values
| Position | Field | Allowed values | Notes |
|---|---|---|---|
| 1 | Minute | 0 to 59 | Top of the hour is 0 |
| 2 | Hour | 0 to 23 | 24-hour clock, midnight is 0 |
| 3 | Day of month | 1 to 31 | Day numbers, not weekdays |
| 4 | Month | 1 to 12 | January is 1, names JAN to DEC often work |
| 5 | Day of week | 0 to 6 | 0 is Sunday, 6 is Saturday, 7 often also Sunday |
Special characters you can use in a field
| Symbol | Name | Example | Meaning |
|---|---|---|---|
| * | Star | * | Every value the field allows |
| , | List | 1,15 | Any of the listed values |
| - | Range | 1-5 | A span from start to end, inclusive |
| / | Step | */15 | Every nth value across the range |
Common cron expressions and what they mean
| Expression | Plain English | Macro equivalent |
|---|---|---|
| * * * * * | Every minute | none |
| 0 * * * * | Every hour, on the hour | @hourly |
| 0 0 * * * | Every day at midnight | @daily |
| 0 0 * * 0 | Every Sunday at midnight | @weekly |
| 0 0 1 * * | Midnight on the 1st of each month | @monthly |
| 0 9 * * 1-5 | At 09:00 on weekdays | none |
| */15 * * * * | Every 15 minutes | none |
Common mistakes to avoid
- Getting the field order wrong. The order is minute, hour, day-of-month, month, day-of-week. Putting the hour first (a habit from reading clocks) means the job fires at the wrong minute. Read the breakdown table to confirm each field landed where you intended.
- Assuming Sunday is 7. The standard range for day-of-week is 0 to 6 with 0 as Sunday. Many systems also accept 7 as Sunday, but not all do, so 0 is the safe choice for Sunday across schedulers.
- Mixing up day-of-month and day-of-week. When both day fields are restricted (neither is a star), classic cron runs the job when either field matches, not both. So 0 0 13 * 5 is not Friday the 13th, it is every 13th and every Friday. If you mean a specific weekday, leave day-of-month as a star.
- Reading */15 as starting at 15. A step like */15 starts at the lowest allowed value, so in the minute field it fires at 0, 15, 30 and 45, not at 15, 30 and 45. To start later, use a range such as 15-59/15.
- Forgetting about timezone. Cron uses the server clock or UTC, not your local time, unless the scheduler is configured with a timezone. A job set for 2 may not run at 2am where you live. Check the server timezone before relying on an hour value.
- Assuming macros and L, W, # always work. Named strings like @daily and special characters L, W and # are not part of classic POSIX cron. They work in Quartz, Spring and some cloud schedulers but will error on a plain Unix crontab. Confirm your scheduler supports them before using them.
Glossary
- Cron
- The time-based job scheduler on Unix and Linux that runs commands at fixed times, dates or intervals.
- Crontab
- The configuration file (and command) that holds a user's cron jobs, one schedule plus command per line.
- Field
- One of the five space-separated parts of a cron expression: minute, hour, day-of-month, month or day-of-week.
- Step value
- A slash expression like */15 that matches every nth value across a range, for example every 15 minutes.
- Range
- A hyphen expression like 1-5 that matches every value from the start to the end inclusive.
- Macro
- A shorthand string starting with @ that replaces all five fields, such as @daily for 0 0 * * *.
- Quartz cron
- A six or seven field cron variant used by Java schedulers that adds a seconds field and special characters like L, W and #.
- CronJob
- A Kubernetes object that runs a containerized task on a cron schedule, using the same five-field syntax.
Frequently asked questions
What are the five fields in a cron expression?
In order they are minute (0-59), hour (0-23), day-of-month (1-31), month (1-12) and day-of-week (0-6, where 0 is Sunday). The job runs when the current time matches every field at once.
How do I convert a cron expression to plain English?
Paste the 5-field expression into a cron to text tool. It reads each field left to right (minute, hour, day-of-month, month, day-of-week), interprets any stars, lists, ranges and steps, and produces one readable sentence plus a field-by-field breakdown you can verify.
What does * * * * * mean?
Five stars means every value of every field, so the job runs every minute of every hour, every day, every month, on every weekday. It is the most frequent schedule cron can express without seconds.
What does */15 mean in cron?
It is a step of 15. In the minute field, */15 fires at minutes 0, 15, 30 and 45, which is every 15 minutes. The step always counts from the lowest allowed value of the field, so it starts at 0, not at 15.
What does 0 0 * * * mean in cron?
It means at 00:00 (midnight) every day. Minute 0 and hour 0 fix the time, and the three stars mean every day-of-month, every month and every weekday. It is the same schedule as the macro @daily.
Is Sunday 0 or 7 in cron?
The standard range is 0 to 6 with 0 as Sunday. Many systems also treat 7 as Sunday, but support varies, so use 0 to be safe across schedulers. You can also write SUN by name on most crons.
What do @daily, @hourly and other cron macros mean?
They are shorthand strings that replace all five fields. @hourly is 0 * * * *, @daily and @midnight are 0 0 * * *, @weekly is 0 0 * * 0, @monthly is 0 0 1 * *, @yearly is 0 0 1 1 *, and @reboot runs once at system startup. Not every scheduler supports them.
Does this tool support seconds or special strings like L, W and #?
No. It parses the classic 5-field cron format (minute through day-of-week). It does not handle a leading seconds field, named macros like @daily, or extended characters such as L (last day), W (nearest weekday) or # (nth weekday) used by Quartz and some cloud schedulers.
Why does my cron job run at the wrong time?
The most common cause is timezone: cron uses the server clock or UTC, not your local time, unless configured otherwise. Other causes are a swapped field order, a misread step value, or the day-of-month and day-of-week either or rule. Read the field breakdown to spot which field is off.
Is my cron expression sent to a server?
No. The parsing and translation happen entirely in your browser with JavaScript. Nothing you type is uploaded, logged or stored anywhere, so it is safe to paste production schedules.