Cron expression generator: how to build and check a schedule
A cron expression is a line of five fields, minute, hour, day of month, month and day of week, that tells a scheduler when to run a job. To build one here, choose a schedule under Select Schedule in Simple Schedule, or switch to Advanced Builder and type each field. The Cron Expression box at the top shows the result, the Human-Readable Explanation says it in English, and Next 10 Executions lists the upcoming run times.
You can also paste an existing expression into the same box to decode it. It accepts 5 fields, 6 fields with a leading seconds field, and the macros @yearly, @annually, @monthly, @weekly, @daily, @midnight and @hourly. Each field is checked as you type, with messages such as "Minute: 60 is outside 0-59".
It runs in your browser; nothing is uploaded (you can check the Network tab in DevTools). To turn a run time into a number, use the Unix timestamp tool, or compare zones with the time zone converter and the world clock.
Table of Use: schedules, expressions and what the tool says
| You want | Expression | Human-Readable Explanation |
|---|---|---|
| Every 15 minutes | */15 * * * * | Every 15 minutes |
| Weekdays at 9:00 | 0 9 * * 1-5 | At 09:00, on Monday through Friday |
| Every 3 hours | 0 */3 * * * | At minute 0, every 3 hours |
| Hourly in office hours | 0 9-17 * * 1-5 | Every hour from 09:00 through 17:00, on Monday through Friday |
| Twice a month | 0 0 1,15 * * | At 00:00, on the 1st and 15th of the month |
| Once a quarter | 0 0 1 */3 * | At 00:00, on the 1st of the month, every 3 months |
| Sunday midnight (7 also means Sunday) | 0 0 * * 7 | At 00:00, on Sunday |
| Every 10 seconds (6 fields) | */10 * * * * * | Every 10 seconds |
| Daily, as a macro | @daily | At 00:00 (expands to 0 0 * * *) |
| 1st of the month or any Monday | 0 0 1 * 1 | At 00:00, on the 1st of the month, or on Monday |
| A date that never happens | 0 0 30 2 * | Invalid expression: That day never occurs in the selected month(s), so this schedule would never run |
Kubernetes CronJobs and GitHub Actions schedules are YAML, so check the surrounding file with the YAML to JSON converter, and compare two crontab files line by line with the text diff tool.
Features
- Two ways to build. Simple Schedule offers 11 presets. Advanced Builder gives one box per field, with a hint under each.
- Decode by pasting. The Cron Expression box is editable. A pasted 6-field expression ticks Include Seconds for you, macros are expanded, and
@rebootis explained as having no schedule to preview. - Field syntax.
*, single values, ranges, lists, steps such as*/5,10-30/5and5/15, month names JAN to DEC and day names SUN to SAT. Day of week accepts 0 to 7, with 0 and 7 both Sunday. A?is accepted in the two day fields. Quartz-only characters such as L, W and # are not supported. - Clear errors. Out-of-range numbers, backwards ranges, oversized steps and impossible dates such as 30 February are reported next to the field.
- Next 10 Executions. Uses the Vixie cron day rules, looks up to 8 years ahead so 29 February schedules work, and refreshes its idea of the current time every 30 seconds. Switch Time zone between Your local time and UTC; local times skipped by a daylight-saving jump are left out.
- Save, Load, Delete, Undo. Names up to 80 characters and descriptions up to 300, stored in your browser only. Deleting offers Undo for a few seconds.
- Reference built in. A Cron Syntax Guide and five Common Examples that load into the box with one click.
The tool does not run or schedule anything itself; it writes and explains the expression for the scheduler you use. To test the pattern a log line must match, try the regex tester.
How to use the cron expression generator
- Under Simple Schedule, open Select Schedule and choose the closest preset. Or click Load Sample for a weekday example.
- Click Advanced Builder to adjust single fields, and tick Include Seconds (6 fields) if your scheduler wants a seconds field.
- Or paste an expression you already have into the Cron Expression box to decode it.
- Read the Human-Readable Explanation. If it says Invalid expression, fix the field that is outlined in red.
- Check Next 10 Executions, and set Time zone to UTC if the scheduler runs in UTC.
- Click Copy, or click Save, type an Expression Name and keep it for later.
Who can use it
- Developers adding a scheduled job to a backend, a CI pipeline or a serverless platform, then checking timestamps with the timestamp converter.
- DevOps and system administrators reading an inherited crontab and confirming what each line really does.
- Support and QA teams checking when a report or reminder should have fired, and counting the days between runs with the date difference calculator.
- Students learning the five-field format by changing one field at a time.
FAQs
How do I write a cron expression for every 5 minutes or every day at midnight?
For every 5 minutes use */5 * * * *. For every day at midnight use 0 0 * * *, or the macro @daily, which means the same thing. In this tool, pick Every 5 minutes or Every day at midnight under Select Schedule, or paste either expression into the Cron Expression box. The next 10 run times confirm it.
What is the difference between 5-field and 6-field cron?
Standard cron has 5 fields: minute, hour, day of month, month and day of week, so the shortest interval is one minute. The 6-field form adds a seconds field at the start and is used by libraries such as Spring and node-cron. Tick Include Seconds (6 fields) to build one, or paste a 6-field expression and the tool switches by itself.
What does */5 mean in cron syntax?
*/5 means every 5th value of the field, counting from its lowest value. In the minute field it runs at minutes 0, 5, 10 and so on up to 55. In the hour field it selects hours 0, 5, 10, 15 and 20, so 0 */5 * * * runs at 00:00, 05:00, 10:00, 15:00 and 20:00. A range can be stepped too: 10-30/10 means 10, 20 and 30.
What happens if I set both day of month and day of week in cron?
Standard (Vixie and cronie) cron then runs the job when either field matches, not when both do. For example 0 0 1 * 1 runs on the 1st of every month and on every Monday. If either of the two fields starts with an asterisk, such as */2, both must match instead. The explanation and the run times here follow those rules.
Why does my cron job run at the wrong time?
The usual cause is the time zone: cron uses the serverโs zone, often UTC, not yours. Set Time zone to UTC in this tool and compare. Other causes are the day-of-month and day-of-week OR rule above, and steps that do not divide evenly, such as */7 in the minute field, which runs at minute 56 and then again at minute 0.
How do I run a cron job every 90 minutes?
One standard expression cannot do it, because steps restart every hour or day. Use two lines: 0 */3 * * * runs at 00:00, 03:00, 06:00 and so on, and 30 1-22/3 * * * runs at 01:30, 04:30, 07:30 and so on. Together they fire every 90 minutes through the day, including 22:30 and then midnight.
Can I use these expressions in Kubernetes, GitHub Actions or Quartz?
5-field expressions work as written in Linux crontab, Kubernetes CronJobs and GitHub Actions. As of October 2026, GitHub Actions uses UTC unless the schedule entry sets the optional timezone key (GitHub changelog, 19 March 2026). Quartz and AWS EventBridge differ: they add fields such as seconds or year, expect ? in one of the two day fields, and number the days of the week from 1 for Sunday.
Is it safe to use, and are my saved expressions uploaded?
It runs in your browser; nothing is uploaded (you can check the Network tab in DevTools). Saved expressions, with their names and descriptions, are kept in your browserโs localStorage on this device only. They are not synced to other browsers, and clearing the site data in your browser removes them.