Cron Expression Generator & Explainer
Free cron expression generator and explainer. Translate any crontab, Quartz or 6-field schedule into plain English, see the next run times in any time zone, and build one from a dropdown.
Runs in your browserNothing uploadedFree · no signup
Or start from a common one:
At 09:00, Monday through Friday.
| Field | Value | Meaning |
| Minutes | 0 | 0 |
| Hours | 9 | 9 |
| Day of month | * | Every day of the month |
| Month | * | Every month |
| Day of week | 1-5 | Monday, Tuesday, Wednesday, Thursday, Friday |
Working out the next runs…
Frequently asked questions
- What do the five fields of a cron expression mean?
- In order: minute (0-59), hour (0-23), day of the month (1-31), month (1-12 or JAN-DEC) and day of the week (0-7 or SUN-SAT, where both 0 and 7 mean Sunday). A * means every value, a-b is a range, a,b,c is a list and */n is a step, so 0 9 * * 1-5 reads as minute 0, hour 9, any day of the month, any month, Monday to Friday — nine in the morning on weekdays. Schedulers that add a seconds field put it in front, making six fields in total.
- Why does my job run on days I did not expect?
- Almost always the day-of-month and day-of-week rule. If both of those fields are restricted — neither is a * — cron runs the job when EITHER matches, not when both do. So 0 0 1 * 1 is not "the 1st, if it is a Monday"; it is "the 1st of every month, and also every Monday", which fires around five times a month instead of once or twice a year. The tool flags this whenever it applies. Vixie cron decides "restricted" by looking at whether the field starts with a *, so */2 counts as unrestricted and 1-31 does not, even though they cover the same days.
- Which cron flavour should I pick?
- Standard crontab for a Linux or macOS crontab, a Docker image or anything that copies Vixie cron. 6-field with seconds for node-cron, Spring's @Scheduled and the many libraries that prepend a seconds field. Quartz for Java Quartz, and for AWS EventBridge, which uses the same shape: those need a ? in exactly one of the two day fields and, importantly, number the days of the week from 1 = Sunday, so the same digit means a different day than it does in a crontab.
- What are L, W and # in a cron expression?
- Quartz extensions, and the real crontab on Linux does not understand them. L in day-of-month is the last day of the month and L-3 is three days before it; LW is the last weekday; 15W is the weekday nearest the 15th, without crossing into another month. In day-of-week, 6L is the last Friday and 6#3 is the third Friday. They are genuinely useful for month-end jobs, which plain cron cannot express at all — the usual workaround is to run daily and check the date in the script.
- What happens to my cron job when the clocks change?
- It depends on which way they move. The crontab(5) manual says a job skipped by a forward change is run soon after the change, so a 02:30 job on the spring-forward night runs at 03:00. Going the other way, a job set for a particular time is not re-run in the repeated hour. Jobs with a wildcard in the hour or minute simply follow the new wall clock. This tool shows next runs in whichever zone you choose and flags any run that lands in a skipped or repeated hour, because the answer differs between schedulers.
- Is my expression sent anywhere?
- No. The parsing, the description and the next-run search all run in JavaScript inside your browser tab, so an internal hostname or job name in a comment never leaves your device. The page keeps working with the network switched off.