Skip to main content
CE

Cron Expression Generator & Parser

Build a 5-field cron expression with simple dropdowns, or paste an existing cron string to get a plain-English explanation of when it runs.

Did you like the tool? Thanks!
Share:

Builder

Fill in each field (or use a quick preset) to build a cron expression live.


Parser

Paste an existing 5-field cron expression to get a plain-English description.

How to Use Cron Expression Generator & Parser

Use the builder to pick a minute, hour, day-of-month, month, and day-of-week from dropdowns and inputs — the 5-field cron expression is generated live as you choose. Or paste an existing cron expression into the parser to get a plain-English description of exactly when it fires, such as "At 09:00, Monday through Friday". Both directions support *, single values, comma lists, ranges, and step values.

About Cron Expression Generator & Parser

Cron is the scheduling syntax used by the Unix `cron` daemon and adopted, in slightly varying dialects, by an enormous range of tools: server crontabs, CI/CD pipelines (GitHub Actions, GitLab CI), cloud scheduled functions (AWS EventBridge, Google Cloud Scheduler), Kubernetes CronJobs, and application-level job schedulers. 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), and day of week (0–6, where 0 is Sunday — some implementations also accept 7 as a second way of writing Sunday). Getting the field order or a range wrong is a classic source of "why did this job not run" bugs, because the syntax is compact enough to be genuinely error-prone to read at a glance, especially once ranges and steps are involved. Each field accepts several kinds of value, and this tool's builder and parser both handle all of them: an asterisk (`*`) means "every value" for that field (every minute, every hour, and so on); a single number means exactly that value; a comma-separated list (`1,15,30`) means any of those specific values; a range (`1-5`) means every value from the first to the second, inclusive; and a step value (`*/15`) means every Nth value starting from the field's minimum — `*/15` in the minute field means minute 0, 15, 30, and 45. These forms can also combine, for example `1-5,10` (a range plus an extra value) or `*/2` in the month field (every second month). The builder direction turns a set of friendly dropdown choices into the compact expression string live, so you never have to remember the field order or the meaning of a bare `*` versus a comma list yourself — pick "every 15 minutes" for the minute field and "weekdays" for the day-of-week field, and the tool assembles `*/15 * * * 1-5` for you automatically as each choice changes. The parser direction runs in reverse: paste an existing expression you found in a crontab, a CI config, or a colleague's code, and a hand-rolled interpreter reads all five fields and produces a human-readable sentence describing exactly when it fires — handling every combination of `*`, single values, lists, ranges, and steps across all five fields, entirely with string parsing and arithmetic, no external cron library. One genuinely confusing corner of the cron specification, worth understanding rather than just working around: when both the day-of-month field and the day-of-week field are restricted (i.e. neither is a bare `*`), most cron implementations treat them as an OR, not an AND — the job runs on days that match either condition, not only days that match both. For example, `0 0 1 * 1` does not mean "only if the 1st of the month happens to fall on a Monday"; it means "midnight on the 1st of every month, OR every Monday, whichever comes first each week." This tool's parser calls this out explicitly in its plain-English description whenever both fields are restricted simultaneously, rather than silently describing it as an AND condition, which is the most common misreading of cron syntax.

Details & Tips

Field ranges and meanings: minute 0–59; hour 0–23 (24-hour clock); day of month 1–31; month 1–12 (numeric only — named months like JAN are not supported by this tool); day of week 0–6 with 0 as Sunday (numeric only — named days like MON are not supported). Worked examples: • `0 9 * * 1-5` → "At 09:00, Monday through Friday." • `*/15 * * * *` → "Every 15 minutes." • `0 0 1 * *` → "At 00:00, on day 1 of the month." • `30 2 * * 0` → "At 02:30, only on Sunday." • `0 */6 * * *` → "At minute 0, every 6 hours." • `15,45 9-17 * * 1-5` → "At minute 15 and 45, between 09:00 and 17:00, Monday through Friday." Step values versus ranges, clarified: `*/15` in the minute field means "every 15th minute starting from 0" (0, 15, 30, 45) — it is a shorthand for the full field range divided into equal steps. A step can also apply to a range rather than the whole field, e.g. `10-40/10` means every 10th minute between 10 and 40 inclusive (10, 20, 30, 40). This tool's parser supports both forms. The day-of-month/day-of-week OR rule: when both fields are something other than `*`, the schedule fires whenever either field's condition is met, not only when both match simultaneously — this is standard cron behaviour (not a quirk of this tool), and the generated description explicitly says "OR" in this situation so it can't be misread as an AND. What is not supported: the special shorthand strings some cron implementations accept, such as `@daily`, `@hourly`, `@weekly`, or `@reboot`, are not parsed by this tool — only the standard 5-field numeric syntax. A 6-field extension with a leading seconds field (used by some non-standard schedulers like Quartz or certain application-level cron libraries) is also not supported; this tool always expects exactly 5 space-separated fields. Named months and weekdays (JAN, FEB, MON, TUE, etc.) are not recognised — use their numeric equivalents. Timezone: cron expressions themselves carry no timezone information — the actual time a job runs at depends entirely on how the system or service executing the cron schedule is configured (server system time, a container's TZ environment variable, or a cloud scheduler's configured timezone setting). This tool describes the fields exactly as written and cannot tell you what timezone your specific cron job will actually execute in — check the configuration of wherever you are deploying the schedule for that. An invalid expression (wrong number of fields, an out-of-range value, or malformed syntax within a field) produces a specific inline error naming the field and the problem, rather than a generic failure.

Frequently Asked Questions

What do the 5 fields in a cron expression mean?
In order: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-6, where 0 is Sunday). All five are required for a standard cron expression.
What does an asterisk (*) mean in a field?
It means "every value" for that field — an asterisk in the hour field means every hour, an asterisk in the day-of-week field means every day of the week, and so on.
What is the difference between a range and a step value?
A range like 1-5 means every value from 1 to 5 inclusive. A step value like */15 means every 15th value starting from the field's minimum (0, 15, 30, 45 for minutes). Steps can also apply to a range, e.g. 10-40/10.
What happens when both day-of-month and day-of-week are restricted?
Standard cron behaviour treats them as an OR, not an AND — the job runs when either condition is met, not only when both match on the same date. This tool's description explicitly flags this case to avoid the common misreading as an AND.
Does 0 or 7 mean Sunday in the day-of-week field?
This tool uses 0 for Sunday, which is the standard convention. Some cron implementations also accept 7 as an alternative way of writing Sunday, but this tool's builder always outputs 0.
Does this tool support named months or weekdays like JAN or MON?
No, only the numeric forms are supported (1-12 for months, 0-6 for days of the week). Convert named values to their numeric equivalents before pasting into the parser.
Does it support shorthand like @daily or @hourly?
No, this tool only parses and generates the standard 5-field numeric cron syntax, not the special shorthand strings some cron implementations also accept.
Does it support a 6-field format with seconds?
No, this tool always expects exactly 5 fields (minute through day of week). Some non-standard schedulers add a leading seconds field, which is not supported here.
What timezone does my cron job run in?
A cron expression itself has no timezone information — the actual execution time depends on how the system or service running the schedule is configured. This tool describes the fields as written; check your server or scheduler's timezone setting separately.
How do I generate "every weekday at 9am"?
In the builder, set minute to 0, hour to 9, day of month to *, month to *, and day of week to a range of 1-5 (Monday through Friday), producing 0 9 * * 1-5.
What happens if I paste an invalid cron expression?
The parser shows a specific error naming which field is invalid and why — for example, a value outside that field's valid range, or the wrong total number of fields.
Is my cron expression sent to a server?
No. Both the builder and the parser run entirely in your browser using JavaScript — nothing is transmitted anywhere.

Part of These Collections

Also Available As

cron generator, cron expression generator, cron parser, crontab generator, cron job generator, explain cron expression

Found a Problem?

Let us know if something with Cron Expression Generator & Parser isn't working as expected.

Thanks — we'll take a look.