Cron Expression Builder
Build cron expressions visually or decode existing ones into plain English with next run preview.
Schedule
Expression
* * * * *
Next 10 Runs
Common Expressions
Syntax Reference
*
Any value
* * * * *
,
List of values
1,15 * * * *
-
Range of values
* 9-17 * * *
/
Step values
*/10 * * * *
The cron expression builder generates and explains cron job schedules. Set each field visually to build a new expression, or paste an existing expression to decode it into plain English. Both modes show the next 10 run times and a per-field breakdown so you can verify the schedule before deploying it to a server.
How the Cron Expression Builder Works
A cron expression is five space-separated fields that together define a recurring schedule: minute, hour, day of month, month, and day of week. Each field accepts a number, a list of numbers, a range, a step value, or the wildcard *. The builder validates each field as you type and assembles the final expression in the standard order.
- Builder mode: fill the five fields individually. The expression updates live above the result and the next 10 run times appear below. Use * for any value, comma-separated numbers for a list, dash for a range, and slash for a step (for example */15 means every 15 units).
- Decoder mode: paste a cron expression and the tool explains it in plain English, shows a per-field breakdown, and lists the next 10 scheduled runs. Three-letter month and weekday names (JAN, FEB, MON, TUE) are accepted alongside numbers.
- Common Expressions: 12 ready-made presets like "every 5 minutes", "weekdays at 9 AM", or "first of every month" load into the active mode with one click.
If you only need a single future date rather than a recurring schedule, the date add/subtract calculator shifts one date by a fixed duration. For arbitrary intervals between two dates, the date difference calculator does the math.
Cron Field Reference
The five fields each accept a specific range of numeric values:
- Minute (0-59): which minute of the hour the job runs.
- Hour (0-23): which hour of the day, in 24-hour format.
- Day of Month (1-31): which day number in the month.
- Month (1-12): which month of the year. JAN through DEC also work.
- Day of Week (0-6): which weekday, where 0 and 7 both mean Sunday. SUN through SAT also work.
The four special characters that combine these values are *, comma, dash, and slash. For example, 0 9 * * 1-5 means "at 09:00 on every weekday", */10 * * * * means "every 10 minutes", and 0 0 1,15 * * means "at midnight on the 1st and 15th of every month".
When to Use Cron
Cron is the standard scheduler on Unix-like systems and is built into every Linux distribution, macOS, and most container orchestrators. Typical uses:
- Backups and exports: dump a database every night at 2 AM, rotate log files every Sunday, or push reports to S3 on the 1st of every month.
- Cache and cleanup: purge expired sessions every 5 minutes, vacuum a database weekly, or clear temp directories once a day.
- External polling: fetch an external API on a schedule, refresh a sitemap, or send a health check ping every minute.
- Notifications and reports: send a weekly digest email on Monday at 8 AM, generate monthly invoices on the 1st, or post a daily reminder at 9 AM on weekdays.
- Scheduled deployments: trigger a build script during off-hours, or rotate API keys on a regular cadence.
To check what time a given Unix timestamp corresponds to, use the main timestamp converter. For format strings used in script filenames or log timestamps (like %Y-%m-%d_%H%M%S), the strftime builder assembles them visually. To generate the matching Linux date command for a script, use the Linux date command generator.
Reading the Next 10 Run Times
The next 10 run times are computed by stepping forward from the current minute and checking each minute against the expression until 10 matches are found. This is how cron itself decides when to run, so the listed times match exactly what the system scheduler will trigger. If the list is empty, the expression has no upcoming matches within the next year - usually because of a contradiction between Day of Month and Day of Week, or an invalid value in one of the fields.
Frequently Asked Questions
A standard cron expression has five fields in this 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). Each field accepts a number, a comma-separated list, a range (3-7), a step (*/15), or the wildcard *. The Decoder mode of this tool explains any expression you paste and shows the per-field breakdown.
The asterisk * means "every value in this field". For example * * * * * matches every minute of every hour of every day. Combine wildcards with specific values to narrow the schedule: 0 * * * * means "at the top of every hour" (minute 0, any hour, any day, any month, any weekday).
Use */5 * * * *. The */5 in the minute field means "every 5 minutes starting at minute 0", and the four asterisks mean any hour, any day, any month, and any weekday. The same pattern works for other intervals: */10 every 10 minutes, */15 every 15 minutes, */30 every half hour. Click the Common Expressions preset to load it instantly.
Use the range 1-5 in the Day of Week field (Monday to Friday). For example 0 9 * * 1-5 runs at 9:00 AM on every weekday. To exclude specific weekdays you can use a comma-separated list (1,2,4,5 skips Wednesday). The decoder mode of this tool translates these ranges into plain English for verification.
Both run at midnight on Sunday. Cron accepts 0 and 7 as Sunday because of compatibility with different historical implementations - some systems numbered weekdays 0-6 starting at Sunday, others 1-7. Most modern cron daemons accept both, but to be safe and portable use 0 for Sunday and the range 1-5 or 1-6 for weekdays.
Yes. Most cron implementations accept three-letter abbreviations: JAN through DEC for months, and SUN MON TUE WED THU FRI SAT for weekdays. The decoder of this tool understands both the numeric and named forms, so 0 0 * JAN MON and 0 0 * 1 1 both decode to "midnight every Monday in January". The names are case-insensitive.
On most cron daemons (Vixie cron, the version used by Linux), specifying both fields creates an OR condition: the job runs if either condition matches. So 0 0 1 * 1 runs at midnight on the 1st of every month AND on every Monday. To get an AND condition you generally need an alternative scheduler like systemd timers or a tool that supports more advanced syntax.
The builder generates the standard five-field expression used by Linux cron (minute, hour, day of month, month, day of week). The decoder also accepts six-field expressions used by Quartz and some other schedulers, where the extra leading field is seconds - the decoder simply drops the seconds field and decodes the remaining five. For Quartz-specific extensions like L (last) or # (nth weekday), use a Quartz-specific tool.
An empty list means the expression has no matches within the next year of minutes. The most common cause is an impossible combination, like day 31 of February, or a Day of Month value that never aligns with the Day of Week value. Switch to Decoder mode to see the per-field breakdown and identify which field is too restrictive or contradicts another.
The preview uses your browser's local timezone so the times match what you would see on a server set to the same timezone. Real cron daemons use the server's configured timezone, which is often UTC. If your server runs in UTC, mentally shift the preview times by your local offset to see when the job will actually fire. To preview a moment in a specific timezone, use the timezone converter.