What this tool does
The Cron Expression Generator produces valid 5-field cron expressions for the schedules people actually need — hourly, every few minutes, daily at a time, weekly on a day, monthly on a date, and weekday business hours — each paired with a clear English description. It turns “I think the fields go minute, hour, day…” into a copy-paste-ready schedule.
How it works
A cron expression has five space-separated fields: minute, hour, day-of-month, month, and day-of-week. The generator builds each preset by filling the relevant fields and leaving the rest as * (every value). For example, daily-at-time sets a minute and hour with * for the date fields; every-15-minutes uses the step form */15 in the minute field; business-hours uses the range 9-17 in the hour field and 1-5 (Mon–Fri) in day-of-week. The human-readable line is derived directly from those field values, so it always matches the expression.
All generation happens locally in your browser.
Understanding the five fields
minute hour day-of-month month day-of-week
────── ──── ──────────── ───── ───────────
0-59 0-23 1-31 1-12 0-6 (0=Sun)
An asterisk (*) in any field means “every valid value for that field.” The most common special characters beyond *:
| Character | Meaning | Example |
|---|---|---|
*/n | Every n units | */15 in minute = every 15 minutes |
a-b | Inclusive range | 9-17 in hour = 9 am through 5 pm |
a,b,c | List of values | 1,3,5 in day-of-week = Mon, Wed, Fri |
a/n | Starting at a, every n | 0/30 in minute = at :00 and :30 |
Common expressions with explanations
0 * * * * Every hour, on the hour
*/15 * * * * Every 15 minutes
0 9 * * 1-5 At 9 am, Monday through Friday
0 0 1 * * At midnight on the first of every month
0 2 * * * At 2 am every day (common for nightly batch jobs)
30 8 * * 1 At 8:30 am every Monday
0 9-17 * * 1-5 Every hour during business hours on weekdays
Timezone gotcha
Cron runs in the timezone of the system or scheduler interpreting it. This causes real bugs:
- Linux crontab uses the system timezone, which is often UTC on servers.
- GitHub Actions runs in UTC by default.
- Kubernetes CronJob also uses UTC.
- Railway and most hosted platforms run in UTC.
If you want a job to run at 9 am London time and the scheduler uses UTC, you need to account for the offset (0 or +1 in summer). Always document the timezone assumption next to the expression — future-you will thank present-you.
Where these expressions work
The standard 5-field syntax is supported by:
- Unix/Linux
crontab - GitHub Actions (
on.schedule.cron) - Kubernetes
CronJob(spec.schedule) - AWS EventBridge scheduled rules (uses the same syntax)
- Most task schedulers and hosted cron services
Some platforms (AWS CloudWatch Events, Google Cloud Scheduler) use a 6-field format adding seconds or years. The expressions here are 5-field only.