Cron Expression Parser

Parse, explain, and preview cron expressions. See next run times, frequency, per-field breakdown, and minute/hour/day heatmaps.

Updated

Share:
Home/Developer Tools/Cron Expression Parser

Cron Expression Parser

Parse, explain and preview cron expressions. See next run times, frequency and a per-field breakdown.

Cron Expression

At 9:00 AM, Monday through Friday
Runs once per day

Per-field Breakdown

FieldRawMatchesCount
Minute00
1
Hour99
1
Day of Month*31 values (1..31)
31
Month*1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
12
Day of Week1-51, 2, 3, 4, 5
5

Frequently Asked Questions

What does it do?

Decodes cron strings into plain English, shows a per-field breakdown, and computes the next run times so you know exactly when a job will fire.

Which syntaxes are supported?

5-field standard, 6-field with seconds, 7-field with year. Special chars *, ,, -, /, ?, L, W, # and aliases @yearly, @monthly, @weekly, @daily, @hourly.

Does it run in my browser?

Yes — all parsing and next-run math happens client-side. No cron expressions are sent to a server.

Is the Cron Expression Parser free to use?

Yes, the Cron Expression Parser is 100% free with no registration, no hidden fees, and no usage limits. All processing happens locally in your browser, ensuring complete privacy.

Is my data safe with this tool?

Absolutely. The Cron Expression Parser processes everything client-side in your browser. No data is uploaded to or stored on any server. Your content remains private on your device at all times.

Does the Cron Expression Parser work on mobile devices?

Yes, the Cron Expression Parser is fully responsive and works on smartphones and tablets. You can use it on any device with a modern web browser -- no app download required.

Do I need to create an account to use this tool?

No account or registration is needed. Simply open the Cron Expression Parser in your browser and start using it immediately. There are no sign-up walls or usage restrictions.

What programming languages or formats does this support?

The Cron Expression Parser supports a wide range of popular formats and languages. Check the tool interface for the full list of supported options.

How do I use the Cron Expression Parser?

Simply enter your input in the provided field, adjust any settings to your preference, and the tool will process it instantly. You can then copy the result to your clipboard or download it.

What do the five fields in a cron expression mean?

A standard cron expression has five space-separated fields, read left to right: minute (0-59), hour (0-23), day of month (1-31), month (1-12 or JAN-DEC), and day of week (0-6, where 0 and 7 both mean Sunday, or SUN-SAT). So "30 8 1 * 1" reads as minute 30, hour 8, on day-of-month 1, any month, and Monday. An asterisk means "every value" for that field. Some schedulers add a leading seconds field for six fields, or a trailing year field for seven. The hard part is that the raw tokens never spell out what they match, which is exactly why misreads happen. Paste any expression into the parser and it labels each field, lists the concrete values it matches, and writes the whole schedule as a plain-English sentence so you can confirm it at a glance.

Does "0 0 13 * 5" run on Friday the 13th or on every Friday?

It runs on both the 13th of every month AND every Friday, not only when the two coincide. This surprises many engineers. In standard Vixie cron, when both the day-of-month and day-of-week fields are restricted (neither is a bare asterisk), the scheduler treats them as an OR: the job fires whenever either field matches. So "0 0 13 * 5" triggers far more often than "Friday the 13th." To actually target Friday the 13th you need a different approach, since plain cron cannot express that AND condition directly. The parser follows the same OR rule your server uses, so the previewed timestamps reflect real behavior. Enter the expression and read the next ten run dates to see immediately whether your schedule fires more often than you intended.

Why does my cron job run at the wrong time, an hour or more off?

The most common cause is a timezone mismatch. Most servers and container schedulers run cron in UTC, while you reason about the schedule in your local time. An expression like "0 9 * * *" means 9 AM in whatever timezone the scheduler uses, so if your machine is on UTC but you live several hours away, the job fires at a local hour you did not expect. Daylight saving transitions add further drift around spring-forward and fall-back dates. The fix is to always confirm which timezone the scheduler interprets the expression in, then convert deliberately. This parser lets you toggle the next and previous run times between your local timezone and UTC, so you can line the two up side by side and catch an off-by-hours error before deploying.

What is the difference between */15 and 15 in a cron field?

They mean very different things. A step value like "*/15" in the minute field means "every 15 minutes" — it matches minutes 0, 15, 30, and 45, so the job runs four times an hour. A plain "15" matches only minute 15, so the job runs once an hour, at quarter past. The slash introduces a step interval, and it can be combined with a range too: "0-30/10" matches 0, 10, 20, and 30. Mixing these up is an easy way to make a job fire four times more or less often than you planned. The parser expands any step expression into the exact list of values it matches and shows a frequency summary like "Runs 96 times per day," so you can verify the cadence instantly rather than counting in your head.

What do the special cron characters L, W, and # do?

These are extended characters used by Quartz-style schedulers for calendar rules that plain ranges cannot express. "L" means "last": in the day-of-month field it matches the last day of the month, and as "5L" in the day-of-week field it means the last Friday. "W" finds the nearest weekday to a given day, so "15W" runs on the weekday closest to the 15th, skipping weekends. "#" picks the Nth weekday of the month, so "2#1" means the first Monday and "6#3" the third Friday. There is also "?", a no-specific-value placeholder used in the day fields when you have set the other. These rules are powerful but easy to misread. Paste an expression using any of them and the parser decodes each one in plain English and previews the real dates it produces.

Embed This Tool

Add a free, live version of this widget to your own website or blog post — it runs entirely in your visitors' browsers, with a credit link back to The Toolbox.

Copy & paste this HTML
<iframe src="https://getthetoolbox.com/embed/cron-parser" title="Cron Expression Parser — The Toolbox" width="100%" height="320" style="max-width:480px;border:1px solid #e2e8f0;border-radius:12px" loading="lazy"></iframe>
<p style="font-size:12px;margin:4px 0 0"><a href="https://getthetoolbox.com/developer-tools/cron-parser?utm_source=embed&utm_medium=widget" target="_blank" rel="noopener">Free Cron Expression Parser</a> by The Toolbox</p>

About the Cron Expression Parser

A cron expression is a compact string that tells a scheduler when to run a job — a backup, a report, a cache flush. The syntax is famously terse: 0 9 * * 1-5 means "9 AM on weekdays," but nothing about the five fields tells you that at a glance. The Cron Expression Parser turns that string into plain English, shows exactly which values each field matches, and computes the real timestamps the job will fire on, so you can confirm a schedule before it ships instead of discovering the mistake in production.

It is built for anyone who writes crontabs or scheduler config: backend and DevOps engineers, SREs, data engineers wiring up ETL jobs, and anyone configuring CI pipelines, Kubernetes CronJobs, or cloud scheduler rules.

What it decodes

Paste an expression and the parser reads it against the correct field layout. It supports three common variants:

  • 5 fields (standard) — minute, hour, day of month, month, day of week. The classic Unix crontab format.
  • 6 fields (with seconds) — adds a leading seconds field, as used by Quartz, Spring, and many language schedulers.
  • 7 fields (with year) — adds a trailing year field (1970–2099) for Quartz-style schedules.

Every special character in the cron grammar is handled: * (any), , (lists), - (ranges), / (steps), ? (no specific value), L (last day of month, or last weekday like 5L for the last Friday), W (nearest weekday), and # (the Nth weekday, e.g. 2#1 for the first Monday). Named values work too — JANDEC, SUNSAT — as do shorthand aliases @yearly, @monthly, @weekly, @daily, and @hourly, which the tool expands to their underlying expression so you see what they really mean.

What it produces

For a valid expression you get four linked views:

  • A human-readable sentence and a frequency summary — for example "Runs once per day" or "Runs 24 times per day" — so you instantly know roughly how often the job fires.
  • Next 10 and previous 5 run times, computed as actual dates. You can read them in your local timezone or UTC, which matters because most servers schedule in UTC and an off-by-hours surprise is one of the most common cron bugs.
  • A per-field breakdown listing each field's raw token, the concrete values it matches, and a count.
  • Minute, hour, and day-of-week heatmaps that light up exactly when the job runs, making dense step expressions easy to sanity-check visually.

When an expression is invalid, you get specific errors — wrong field count, an out-of-range value, a reversed range — rather than a silent failure.

Why the run-time preview matters

Cron has subtle rules that trip up even experienced engineers. The biggest is the day-of-month / day-of-week interaction: in standard Vixie cron, if both fields are restricted, the job runs when either matches (an OR, not an AND). So 0 0 13 * 5 fires on the 13th and every Friday, not only on Friday the 13th. This parser follows that OR rule, so the previewed run times reflect what your server will actually do. Seeing the next ten real timestamps is the fastest way to catch this class of bug before it costs you a missed backup or a duplicated job.

Privacy and how it runs

Everything happens in your browser. The expression is parsed and the run times are calculated client-side in JavaScript — nothing is sent to or stored on a server, so internal schedules and infrastructure details stay on your device. There is no sign-up and no usage limit. You can copy the cron string or the human-readable description, or download a plain-text summary of the breakdown and run times. A set of common presets — every 5 minutes, weekdays 9–5, first of the month, and more — gives you a correct starting point to adapt.