Cron Expression Generator

Processed locally · Never leaves your browser

Build cron expressions visually with human-readable descriptions and next-run previews. Also parse existing expressions.

Quick Presets

Custom Expression

* = any value */N = every N N,M = list N-M = range

0-59 * */N N,M N-M

0-23 * */N N,M N-M

1-31 * */N N,M N-M

1-12 * */N JAN-DEC

0-6 * */N SUN-SAT

Generated Expression

* * * * *
Every minute, every hour, every day

Next 5 scheduled runs

1.Thu, May 7, 2026, 08:06 PM
2.Thu, May 7, 2026, 08:07 PM
3.Thu, May 7, 2026, 08:08 PM
4.Thu, May 7, 2026, 08:09 PM
5.Thu, May 7, 2026, 08:10 PM

Special Characters

*

Any value

*/N

Every N (step)

N,M

List of values

N-M

Range N to M

Runs entirely in your browser — nothing is uploaded
Runs entirely in your browser. No uploads. Your files stay private.

What Is a Cron Expression?

Cron is a time-based job scheduler that originated in Version 7 Unix in 1979 and has become the de-facto standard for declaring 'run this at this time' rules. A cron expression is a five-field string - minute, hour, day-of-month, month, day-of-week - that the daemon evaluates once per minute, firing the job whenever the current wall-clock time matches every field.
Generating expressions is the easy part; reading someone else's expression six months later is what bites you. This tool pairs a field-by-field builder with cronstrue, the canonical JavaScript library for translating cron expressions back into English. Type 0 9 * * 1-5 and cronstrue prints 'At 09:00 AM, Monday through Friday' in real time. The library is the same one used by Hangfire, Azure Logic Apps, and several major schedulers' admin UIs, so its English matches what you'll see elsewhere.
The next-runs panel is computed locally with a small minute-by-minute matcher you can read in the source above. It walks forward from now, checking each five-tuple against your expression, and stops at the fifth match. The matcher supports * (any), N (literal), N-M (range), N,M (list), and */N (step) - the standard Vixie cron syntax used by Linux crontab and most cloud schedulers.
One subtle behaviour to know: when both day-of-month and day-of-week are restricted (neither is *), classic Unix cron uses OR semantics - the job runs if either matches. This is unintuitive and a frequent source of bugs. Our preview matcher uses AND semantics for clarity, which matches the behaviour of Quartz-style schedulers (Spring, Java, AWS EventBridge, GitHub Actions). If you're writing into a crontab on a Linux box, double-check the OR rule before relying on a complex day-of-week schedule.
Time-zone handling is another foot-gun. The next-runs preview here uses your browser's local time zone, but most production cron daemons run in UTC unless explicitly configured otherwise. GitHub Actions schedules, AWS EventBridge, and Kubernetes CronJobs all default to UTC. Always document the time zone alongside the expression, or you'll discover at 3 AM that '0 9 * * *' meant something different on the server.
Cron has hard limits. The smallest interval is one minute - you cannot schedule a job every 30 seconds with standard 5-field syntax. The smallest practical interval on shared cloud schedulers is often higher: GitHub Actions guarantees only that schedules fire within 15 minutes of the requested time, and AWS EventBridge has a 1-minute floor for rate expressions. For sub-minute scheduling, use a long-running daemon or systemd timers with OnUnitActiveSec.
There's also a 6-field variant (Quartz, used by Spring and Hangfire) that adds a leading seconds field, and a 7-field variant that adds a year. This tool emits standard 5-field Unix syntax, which works in crontab, GitHub Actions, GitLab CI, Vercel Cron Jobs, Cloudflare Workers cron, Kubernetes CronJob, and most other schedulers. Drop the result into your YAML or crontab as-is.

Common Use Cases

01

Nightly database backups

Schedule pg_dump or mongodump at 02:00 with 0 2 * * * - a quiet hour for most production traffic but before early-morning ETL jobs start.

02

GitHub Actions weekly maintenance

Run dependency updates, link checks, or stale-issue triage on a Sunday morning schedule embedded in a workflow YAML.

03

Hourly log rotation

Trigger logrotate or a custom log shipper at the top of every hour with 0 * * * *.

04

Weekday reporting

Send the daily Slack standup digest at 09:00 Monday through Friday with 0 9 * * 1-5.

Frequently Asked Questions

Left to right: minute (0-59), hour (0-23), day-of-month (1-31), month (1-12, JAN-DEC also accepted in many implementations), day-of-week (0-6, where 0 and 7 both mean Sunday). A * means 'any value' for that field.
The slash notation is 'step'. */15 in the minute field means 'every value of minute that is a multiple of 15', so it fires at minute 0, 15, 30, and 45 of every hour. */N in any field works the same way: every N units, starting at the minimum.
0 9 * * 1-5 fires at 09:00 Monday through Friday. Day-of-week values are 0 (Sunday) through 6 (Saturday); some implementations also accept SUN-SAT abbreviations and treat 7 as Sunday for compatibility.
Classic Unix cron uses OR semantics - if both are non-* the job runs when either matches. Quartz-style schedulers (Spring, AWS EventBridge, GitHub Actions) use AND. Always test your specific scheduler's behaviour or stick to one of the two fields being *.
Not with standard 5-field cron - the minimum interval is one minute. For sub-minute scheduling use systemd timers (OnUnitActiveSec=30s), a long-running daemon with setInterval, or a job runner like Temporal/Inngest that supports finer schedules.
Linux crontab, GitHub Actions schedules, GitLab CI scheduled pipelines, AWS EventBridge (rate and cron variants), Google Cloud Scheduler, Vercel Cron Jobs, Cloudflare Workers triggers, Kubernetes CronJob resources, Spring @Scheduled, Hangfire, and Quartz - though some use 6- or 7-field variants.
It depends entirely on the scheduler. Linux crontab honors the system time zone (or CRON_TZ); GitHub Actions, AWS EventBridge, and Cloud Scheduler default to UTC; Kubernetes CronJob lets you set timeZone in the spec on recent versions. The next-runs preview here uses your browser's local time zone, so adjust if your target runs in UTC.
cronstrue is a JavaScript library (the same one Hangfire and Azure use) that parses a cron expression and emits an English description. It handles steps, ranges, named months and weekdays, and the most common scheduler dialects. It runs entirely in the browser - no API calls.
EventBridge uses a 6-field variant with year and slightly different syntax (? for 'no specific value', plus L, W, # weekday operators). The 5-field expression here works after you add a trailing * for year and replace one of day-of-month/day-of-week with ?. Read the AWS docs for the exact dialect.
Standard Unix cron just skips the missed run; the job is not retried. anacron is a separate utility that catches up after downtime. Cloud schedulers (EventBridge, Cloud Scheduler) generally still fire the next match but don't backfill missed ones. For exactly-once guarantees, use a queue with a scheduled message instead.

Advertisement