Cron Expression Builder Free | Parse & Explain Cron Online

⚙️ Developer Tools Free Forever

Cron Expression Builder & Next Run Time Calculator

Type a standard 5-field cron expression and instantly see a plain-English schedule description plus the next 10 actual run times, all calculated in your browser.

Cron ExpressionFormat: minute hour day-of-month month day-of-week
Calculate Runs Starting From (optional)Leave blank to start from right now.
About This Tool

How this cron builder parses five fields and simulates real run times

A cron expression is compact by design, which is exactly what makes it easy to misread. This tool does two things a schedule string alone cannot: it turns the five fields into a plain English sentence, and it actually simulates the clock, minute by minute, to show the next ten real timestamps your job would fire at. Nothing is guessed from pattern matching against a lookup table of known expressions. It runs the same matching logic a cron daemon would.

The parser, the description generator, and the simulation all run in your browser with plain JavaScript Date objects. There is no server component, so the schedule you are testing is never transmitted anywhere.

Parsing the five fields

A standard cron string is minute hour day-of-month month day-of-week. The tool rejects anything that does not split into exactly five whitespace-separated fields, then parses each one independently against its own valid range.

FieldAllowed rangeSpecial names accepted
Minute0-59None
Hour0-23None
Day of month1-31None
Month1-12JAN through DEC
Day of week0-7SUN through SAT, both 0 and 7 mean Sunday

Each field supports the standard cron syntax: a bare wildcard *, comma-separated lists like 1,15,30, dash ranges like 9-17, and step values like */15 or 10-20/2. The parser expands every one of these into a concrete sorted array of matching numbers rather than keeping the pattern symbolic, which is what makes the plain-English description and the run-time simulation both work off the same normalized data.

// simplified from parseField() in the tool source part.split(‘/’).forEach(function() {}); if (rangePart.indexOf(‘-‘) !== -1) { var rp = rangePart.split(‘-‘); start = normalizeToken(rp[0], names); end = normalizeToken(rp[1], names); } for (var v = start; v <= end; v += step) { allowed[v] = true; }

The day-of-month OR day-of-week rule

This is the part of cron syntax that trips people up most. When both day-of-month and day-of-week are restricted (neither is a wildcard), a real cron daemon treats them as an OR, not an AND. Setting day-of-month to 15 and day-of-week to Monday means the job runs on the 15th of every month, plus every Monday, not only on Mondays that happen to fall on the 15th. This tool implements that exact rule rather than the more intuitive looking AND that a naive implementation would default to.

Step 1 Start the clock Simulation begins one minute after your chosen start date (or now, if none is set), with seconds and milliseconds zeroed out.
Step 2 Test each minute Every candidate minute is checked against all five parsed fields using the OR rule above for day fields.
Step 3 Collect ten matches Matching timestamps are pushed to a results array until it holds ten entries.
Step 4 Bounded search window The loop stops after roughly 8 years of simulated minutes even if fewer than ten matches were found, which protects the browser tab from hanging on an expression like 0 0 30 2 * that can never actually match, since February never has a 30th.
Times shown are local, not UTC. The simulation and the plain-English description both operate on your browser’s local time zone via the native Date object. A cron daemon running on a server configured for UTC will fire at a different wall-clock moment than what this tool previews, unless your machine’s time zone also happens to be UTC. Convert manually if you are testing an expression bound for a server in another region.
Plain-English description

Built from pattern rules on the raw field text, for example detecting a leading */ to describe step intervals, or a single numeric value in both minute and hour fields to describe an exact daily time like “At 09:00.”

Custom start date

Instead of always simulating from the current moment, you can set a specific starting timestamp, useful for checking what a schedule would have produced starting from a past deploy date.

Common presets

One-click buttons load known-good expressions like 0 9 * * 1-5 for weekday mornings, so you can see correctly formed syntax before writing your own from scratch.

5-field standard cron Minute-resolution simulation OR logic for day fields

Cron implementations and documentation

Jobs people schedule with cron

Verifying a new crontab line before deploying it to a production server, checking whether a Kubernetes CronJob manifest’s schedule field will actually fire when you expect, debugging why a scheduled task ran on an unexpected day because of the day-of-month/day-of-week OR rule, translating a colleague’s cryptic five field string into something you can explain in a code review, and previewing the effect of a step interval like */15 before committing it to a monitoring or backup job.

Common Questions

FAQ: Cron Expression Builder

In order, they are: minute (0-59), hour (0-23), day-of-month (1-31), month (1-12 or JAN-DEC), and day-of-week (0-6 or SUN-SAT, where both 0 and 7 mean Sunday). A job runs only when the current time matches every field’s constraint, subject to the special OR rule that applies when both day-of-month and day-of-week are restricted.

An asterisk means ‘every value is allowed’ for that field, it’s a wildcard that matches any minute, hour, day, month, or weekday. A cron expression of `* * * * *` means the job runs every single minute, with no restriction on any field.

A comma denotes a list of specific values, so `1,15` means only the 1st and the 15th of the month. A hyphen denotes a continuous range, so `1-15` means every day from the 1st through the 15th inclusive. Mixing them up is one of the most common cron mistakes, since both look similar but produce very different schedules.

This is a well known quirk of the standard cron specification: when neither field is a wildcard, the job runs if the current date matches EITHER condition, not both. For example, `0 0 1 * 1` runs at midnight on the 1st of every month AND on every Monday, not only on Mondays that happen to fall on the 1st.

A step value divides a field’s full range into equal intervals starting from its minimum, so `*/15` in the minute field means every 15th minute starting at 0, producing runs at :00, :15, :30, and :45. Steps can also apply to a sub-range, like `10-40/10`, which would fire at 10, 20, 30, and 40.

Yes, this tool accepts standard three-letter abbreviations, JAN through DEC for months and SUN through SAT for weekdays, in addition to their numeric equivalents, and you can mix names and numbers across different fields if you like.

Some valid but rare cron expressions, most notably schedules tied to February 29th, only occur on leap years, which happen roughly once every four years. An 8-year search window guarantees the next occurrence is found even for these edge-case schedules, while still completing the calculation almost instantly for any normal schedule.

Privacy Overview

Cookies let this site remember your preferences and show us which tools people actually use. Full detail sits in our Privacy Policy.