WebToolsPlanet
developer Tools

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+ times
Client-Side Processing
Input Data Stays on Device
Instant Local Execution

What 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.
Hannah L.Platform Engineer

Find this tool useful? Support the project to keep it free!

Buy me a coffee

What 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

1

Type or paste a cron expression into the input field (e.g., `0 9 * * 1-5` or `*/15 * * * *`)

2

The plain English translation appears instantly below: "Every day at 9:00 AM, Monday through Friday"

3

Scroll to the "Next Runs" section to see the next 10 scheduled dates and times in your local timezone

4

Click any preset from the "Common Schedules" sidebar (every minute, daily at midnight, every weekday, etc.)

5

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:

Cron expression
Expression 1: 0 9 * * 1-5
Expression 2: */15 * * * *
Expression 3: 0 0 1 * *
Expression 4: 30 6 * * 0
Plain English + next run
0 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:00

Client-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?
The 5-field Unix cron order is: [minute] [hour] [day-of-month] [month] [day-of-week]. Example: 30 14 15 3 * = "At 2:30 PM on March 15th, any day of week". Memory aid: "M H D M W" — Minute, Hour, Day, Month, Weekday. The 6-field variant (used by Quartz Scheduler, Spring) adds seconds as the first field: [second] [minute] [hour] [day] [month] [weekday]. AWS EventBridge uses [minute] [hour] [day] [month] [weekday] [year].
What do the special characters * / , - mean?
* (asterisk) = every possible value (e.g., * in the minute field = every minute). / (slash) = step/interval (*/5 in minutes = every 5 minutes; 10/5 = at 10, 15, 20, 25...). , (comma) = list of specific values (1,15 in days = 1st and 15th). - (hyphen) = range (9-17 in hours = 9am through 5pm inclusive). In Quartz Scheduler: L = last (L in day-of-month = last day of month), W = nearest weekday (15W = nearest weekday to the 15th), # = nth weekday (2#1 = first Monday).
What is the difference between */5 and 0/5 in a cron expression?
*/5 in the minute field means "every 5 minutes starting from minute 0": fires at 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55. 0/5 is identical to */5 in most implementations — starting value/step. However, 10/5 starts at minute 10 then every 5: fires at 10, 15, 20... not at 5. The starting value before the slash is significant. 15/30 in minutes fires at 15 and 45, not at 0 and 30.
Why does GitHub Actions use UTC time for cron schedules?
GitHub Actions cron jobs run in UTC. If you write schedule: cron: "0 9 * * 1-5" expecting 9am Pacific (UTC-7), it actually fires at 9am UTC = 2am Pacific. Always convert your desired local time to UTC when writing GitHub Actions cron schedules (or Kubernetes, AWS EventBridge, Vercel, Railway, Render). Use this explainer to verify: the "Next Runs" section shows times in your browser's local timezone so you can spot timezone mismatches.
Can I run a cron job on the last day of every month?
Standard Unix cron doesn't support "last day of month" directly. Common workarounds: (1) Use 5-field cron: 0 0 28-31 * * — fires on 28th–31st. Then in your script, check if tomorrow is the 1st and exit if not. (2) Quartz Scheduler: use L in the day-of-month field: 0 0 0 L * ?. (3) AWS EventBridge: supports L syntax. (4) Kubernetes: separate multiple CronJob objects for different months, or handle the last-day logic in the script.
What is the difference between cron day-of-week 0 and 7?
Both 0 and 7 represent Sunday in standard Unix cron. This dual-Sunday representation comes from historical inconsistency between different Unix variants (BSD used 0, some others used 7). Most modern cron implementations accept both. Day-of-week values: 0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday, 7 = Sunday (alias). Named values also work in many implementations: SUN, MON, TUE, WED, THU, FRI, SAT.

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

Client-side cron parserEnglish template generationNext-run date iterationClient-side only