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.

FieldValueMeaning
Minutes00
Hours99
Day of month*Every day of the month
Month*Every month
Day of week1-5Monday, 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.