Cron Expression Builder & Explainer
Translate any 5-field cron schedule into plain English, validate it, and see the next five times it will actually run.
Interactive Client Prototype Sandbox
At minute(s) 0, 15, 30, 45 past hour(s) 0 on day-of-month 1, 2, 3, 4, 5, 6, 7 on Mon.
Disclaimer: This free tool is provided “as is,” without warranties of any kind, and is for general informational purposes only — not professional, legal, financial, medical, tax, or engineering advice. Results may contain errors; verify anything important independently and use at your own risk. We accept no liability for any loss or damage arising from its use. See our Terms of Use for details.
Step-by-Step Guide
Type a 5-field cron expression in the format: minute hour day-of-month month day-of-week. Each field accepts a specific value (e.g. 30), a range (1-5), a step (*/15 for every 15 units), a list (1,3,5), or an asterisk (*) for 'every'. The tool shows a plain-English description of the schedule, flags any syntax errors with a clear message, and computes the next five actual run times in your local timezone.
Field reference
Minute: 0–59. Hour: 0–23. Day-of-month: 1–31. Month: 1–12 (or JAN–DEC). Day-of-week: 0–6 or 7 (both 0 and 7 mean Sunday), or SUN–SAT. Use * to mean 'every valid value'. Use */n to mean 'every n-th value'. Mixing day-of-month and day-of-week with both non-asterisk values uses OR logic in many cron implementations — the job runs if either condition is true.
Common presets
Click a preset to populate the expression field: every minute (*/1 * * * *), every hour at the top (:00 of every hour: 0 * * * *), once daily at midnight (0 0 * * *), weekdays at 9 AM (0 9 * * 1-5), the first of every month at noon (0 12 1 * *), and others.
*/15 0 1-7 * 1 — the description reads: 'every 15 minutes during hour 0 (midnight), on days 1 through 7 of the month, only on Mondays'. The next five run times show the actual Monday midnight dates in your local timezone. The expression 0 9 * * 1-5 reads: 'at 9:00 AM on weekdays (Monday through Friday)'.
Who it's for
Backend developers, DevOps engineers, sysadmins, and anyone writing scheduled jobs.
Core Features
- Plain-English description of any 5-field cron expression.
- Live validation with clear error messages for bad ranges and steps.
- Computes the next five real run times in your local timezone.
- One-click presets for the most common schedules.
🛡️ No tracking — your inputs, keys, and details never leave this client sandbox.
What is a cron expression?
A cron expression is a text string that defines a recurring time schedule. It originates from the Unix cron daemon (named for 'chronos', the Greek word for time), which executes commands at specified times. A standard 5-field expression specifies minute, hour, day-of-month, month, and day-of-week, in that order. For example, '0 8 * * 1' means 'at 8:00 AM every Monday.' Some systems extend this to 6 fields (adding seconds) or 7 fields (adding a year).
What does the asterisk (*) mean?
An asterisk in any field means 'every valid value for this field.' In the minute field, * means every minute (0 through 59). In the day-of-week field, * means every day of the week. When all five fields are asterisks (* * * * *), the job runs every minute. Asterisks are the most common token in cron expressions because most schedules only specify constraints in one or two fields.
What does */15 mean in the minute field?
The /n syntax means 'every n-th value.' */15 in the minute field means 'at minute 0, 15, 30, and 45 of every hour' — four times per hour. In the hour field, */4 would mean 'at hours 0, 4, 8, 12, 16, and 20' — six times per day. This step syntax works in all five fields.
Why do my next run times look unexpected?
The most common surprise is the interaction between day-of-month and day-of-week when both are set to non-asterisk values. Many cron implementations (including Vixie cron, the most common) use OR logic: the job runs if day-of-month matches OR day-of-week matches. So '0 0 1 * 1' runs at midnight on the 1st of every month AND also at midnight every Monday — not 'only on Mondays that fall on the 1st.' If you need the intersection, some systems support a Quartz-style expression with an extra seconds field and different day-of-week semantics.
How do timezone and DST affect cron schedules?
System cron runs in the server's local timezone. During daylight saving time transitions, a job scheduled for 2:30 AM may be skipped (when clocks spring forward) or run twice (when clocks fall back). Most production schedulers — cloud functions, Kubernetes CronJobs, GitHub Actions cron triggers — allow you to specify the timezone explicitly and handle DST transitions. This tool computes next run times in your browser's local timezone using the Intl API.
Cron expressions and cloud schedulers: the same problem, different syntax
Cron expressions and modern cloud scheduling APIs both define when a recurring job should run — but they solve the readability problem in opposite directions. A cron expression like */15 0 1-7 * 1 compresses an entire schedule into eleven characters; a cloud platform's UI might spread the same configuration across five labeled dropdowns. The cron format wins on brevity and portability (the syntax is nearly identical across Linux, GitHub Actions, Kubernetes CronJobs, and AWS EventBridge) but loses on immediate legibility — which is precisely what a translator tool exists to provide. Reading cron fluently is a skill worth developing, but a plain-English breakdown catches errors far faster than mentally parsing five fields under deadline pressure.
The 5-field cron expression format
The standard cron format uses five whitespace-separated fields: minute (0–59), hour (0–23), day-of-month (1–31), month (1–12), and day-of-week (0–6, where 0 is Sunday). Each field accepts: a specific integer, a range (2-5), a comma-separated list (1,3,5), a step (*/10 or 2-30/5), or an asterisk for 'all'. The total number of combinations in a single expression is enormous — * * * * * matches once per minute, giving 525,600 possible run times per year.
The day-of-month / day-of-week trap
The single most common source of unexpected cron behavior is the interaction between day-of-month and day-of-week when both fields have non-asterisk values. Vixie cron (the dominant implementation) uses OR logic: the job runs if day-of-month matches OR if day-of-week matches. So '0 0 1 * 1' runs at midnight on the 1st of every month and also at midnight every Monday — not only on Mondays that fall on the 1st. This surprises nearly every developer who encounters it for the first time. The next-run time calculator in this tool shows the actual upcoming dates, which makes the OR behavior immediately visible.
Modern cron derivatives
The original Vixie cron (1987) established the syntax most tools use today. Extensions since then include a sixth field for seconds (used by Quartz Scheduler in Java and popular in .NET), year as a seventh field, named day and month abbreviations (MON, JAN), and the @ shortcuts (@yearly, @monthly, @weekly, @daily, @hourly, @reboot). Cloud platforms like AWS CloudWatch Events, GitHub Actions, and Kubernetes CronJobs all use the 5-field standard or a close derivative. Understanding the original 5-field format transfers directly to all of these platforms.