Cron Expression Explainer
Translate cron expressions to plain English — see next run times, validate schedules, and learn cron syntax with live examples.
Last updated: March 25, 2026
Used 19K+ timesWhat users say
“The AWS EventBridge vs standard cron distinction in the notes saved me an embarrassing production incident. The "next 10 runs" preview is the killer feature.”
Find this tool useful? Support the project to keep it free!
Buy me a coffeeWhat is Cron Expression Explainer?
Cron is a time-based job scheduler in Unix/Linux systems — it runs commands or scripts automatically at specified times. Every scheduled task has a cron expression: a compact 5 or 6-field string defining when the task fires. A standard expression like `*/15 9-17 * * 1-5` means "every 15 minutes between 9am and 5pm on weekdays" — but reading this without a decoder requires memorizing the field order and operator syntax.
The five standard fields are: **Minute** (0–59), **Hour** (0–23), **Day of Month** (1–31), **Month** (1–12), **Day of Week** (0–7, 0 and 7 both = Sunday). Special operators: `*` = every unit, `*/n` = every n units, `n,m` = specific values, `n-m` = range, `L` = last day, `W` = nearest weekday (Quartz scheduler). AWS EventBridge, GitHub Actions, Kubernetes CronJobs, and Vercel cron all use this syntax. This explainer translates any expression to human English and shows the next run timestamps so you can verify your schedule before deploying.
How to Use Cron Expression Explainer
Type or paste a cron expression into the input field (e.g., `0 9 * * 1-5` or `*/15 * * * *`)
The plain English translation appears instantly below: "Every day at 9:00 AM, Monday through Friday"
Scroll to the "Next Runs" section to see the next 10 scheduled dates and times in your local timezone
Click any preset from the "Common Schedules" sidebar (every minute, daily at midnight, every weekday, etc.)
An error message appears if the expression is invalid — hover for details on which field caused the parse error
Common Use Cases
- Verifying a newly written cron expression before deploying it to avoid unexpected midnight or hourly triggers
- Deciphering a legacy cron job (from a previous developer) set up months ago without documentation
- Writing a GitHub Actions schedule workflow — understanding that "15 4 * * *" fires at 4:15 AM UTC every day
- Configuring Kubernetes CronJob manifests and confirming the schedule hits the right business hours
- Setting up AWS EventBridge (cron syntax differs from standard Unix: year field added, ? used for day wildcard)
- Planning a scheduled database backup and confirming it runs nightly at low-traffic 3 AM windows
- Teaching junior developers cron syntax by showing how each field change affects the English description
- Debugging why a scheduled task isn't running — checking if the expression evaluates to the expected next run time
Example Input and Output
Explaining common cron expressions used in production systems:
Expression 1: 0 9 * * 1-5
Expression 2: */15 * * * *
Expression 3: 0 0 1 * *
Expression 4: 30 6 * * 00 9 * * 1-5
→ "At 9:00 AM, Monday through Friday"
→ Next: Mon Mar 25 2024 09:00:00
*/15 * * * *
→ "Every 15 minutes"
→ Next: 2024-03-25 14:15, 14:30, 14:45...
0 0 1 * *
→ "At midnight on the 1st of every month"
→ Next: Mon Apr 1 2024 00:00:00
30 6 * * 0
→ "At 6:30 AM every Sunday"
→ Next: Sun Mar 31 2024 06:30:00Client-Side Processing
All cron parsing and English translation runs in your browser using JavaScript. Cron expressions (which may reference internal system names or schedules) are never sent to our servers.
Testing Cron in Code
Validate cron expressions programmatically with: cronstrue (npm) — JavaScript library that translates cron to English, used by VS Code extensions. node-cron — run cron expressions in Node.js for testing. cron-parser (npm) — parse expressions and iterate next occurrences. In Python: croniter library. Always test your schedule with a "fast" interval (every minute) in a non-production environment before changing to the real production schedule.
AWS EventBridge vs Unix Cron
AWS EventBridge uses a 6-field cron with a year field and uses ? instead of * for "any" in mutually exclusive day fields: cron(Minutes Hours Day-of-month Month Day-of-week Year). Example: cron(0 9 ? * MON-FRI *) = weekdays at 9am. The ? is required in either day-of-month OR day-of-week (whichever is not specified). Standard Unix cron uses * for both — using Unix syntax in EventBridge will cause a validation error.
Frequently Asked Questions
What is the field order for a standard cron expression?
What do the special characters * / , - mean?
What is the difference between */5 and 0/5 in a cron expression?
Why does GitHub Actions use UTC time for cron schedules?
Can I run a cron job on the last day of every month?
What is the difference between cron day-of-week 0 and 7?
How This Tool Works
The cron expression string is split by whitespace into 5 (or 6) field tokens. Each field is validated against its allowed range. The English translation is built by analyzing each field: if a field is *, it contributes "every [unit]"; if it contains /, it contributes "every N [units]"; ranges produce "X through Y"; lists produce "on X, Y, and Z". The field translations are combined into a grammatically correct English sentence. Next run times are computed by iterating from the current time forward, incrementing minute by minute and checking if the current time satisfies all field conditions.
Technical Stack