← Cron Expression Generator

How to Use the Cron Expression Generator, Step by Step

Reviewed by the FreeOnline.fyi team · Updated

Key points

  • Cron Expression Generator turns five chip rows into a valid cron string, an English description and the next five run times.
  • Standard cron uses 5 fields, Quartz adds seconds first, and AWS EventBridge adds a year and needs a ? in one day field.
  • When day-of-month and day-of-week are both restricted, standard cron runs the job if either one matches.
  • Every preview shows a UTC equivalent because most schedulers execute in UTC, not your laptop's timezone.
  • The tool runs entirely in your browser with no login, so pasted expressions never leave your machine.

What the Cron Expression Generator does

The Cron Expression Generator at FreeOnline.fyi is a single-screen cron builder: you click chips for minute, hour, day of month, month and weekday, and it returns a valid cron string, a plain-English sentence describing it, and the next five times the schedule will fire. Everything runs in your browser — no login, no upload, no server round trip for the parsing or the next-run math.

It opens on a schedule that already works rather than an empty field: `0 9 * * *`, which is daily at 09:00. From there you either edit the five rows directly or start from a preset — every minute, every 5 minutes, hourly, daily at 09:00, weekdays at 09:00, weekly on Monday, monthly on the 1st, or the first day of each quarter.

If you already have an expression, paste it into the optional field on the same screen. The tool accepts a 5-field crontab string, a Quartz 6- or 7-field string, or a macro such as @daily, and parses it back into the visual selector so you can keep editing by clicking. Invalid input raises an inline field-level error and leaves your current schedule untouched, which is much safer than half-applying a broken paste. Start with the Cron Expression Generator open in a second tab while you follow the steps below.

How do you build a cron expression step by step?

Work from the smallest unit to the largest, and change one row at a time so you can watch the description and the fire times update. The five rows are always in the same order: minute, hour, day of month, month, day of week.

Start with the minute row, because it decides the resolution. Leave it on `*` for every minute, choose a plain integer such as `30` to fire once an hour, or choose a step such as `*/5`, `*/15` or `*/30` to fire on a rhythm. Then set the hour row: a single integer like `9`, a range like `9-17`, a list like `1,13`, or a step.

Leave day of month and month on `*` for anything recurring, and set day of week last — `1-5` for Monday through Friday, or a named chip such as MON or FRI. Two examples cover most real jobs: weekdays at 09:00 is `0 9 * * 1-5`, and every 15 minutes during business hours is `*/15 9-17 * * 1-5`, which fires at :00, :15, :30 and :45 of every hour from 09:00 to 17:45 — 36 runs per weekday. Finally, switch to the dialect tab your platform expects and copy the string.

Which dialect tab should you copy?

Copy the Standard tab (5 fields) for a Linux crontab entry, a Kubernetes CronJob, a GitHub Actions schedule trigger, or most CI runners. The order is minute, hour, day of month, month, day of week, exactly as shown in the chips.

The Quartz tab (6 or 7 fields, used by Spring and Quartz Scheduler) inserts a seconds field at the very front, so "09:00:00 every weekday" becomes `0 0 9 ? * MON-FRI` rather than `0 9 * * 1-5`. Quartz also numbers weekdays 1 = Sunday through 7 = Saturday and supports the `?`, `L`, `W` and `#` operators that plain cron does not.

The AWS EventBridge Scheduler tab emits six fields in the order minutes, hours, day of month, month, day of week, year, and it will not use `*` in both day fields at once — one of them must be `?`. If you hand-edit any of these strings after copying, switch back to the same tab and re-check the next-run preview before deploying, because a one-character change can shift the schedule by hours.

Common cron mistakes the preview catches

When both day of month and day of week are restricted, Vixie-style cron — the behaviour documented in the crontab(5) man page — treats them as OR, not AND. So `0 0 1 * 1` fires at midnight on the 1st of every month and again on every Monday, not only on Mondays that fall on the 1st. The next-five-runs list makes that jump out immediately.

Steps are a second frequent surprise. `*/5` in the hour row gives 00:00, 05:00, 10:00, 15:00 and 20:00, then a four-hour gap to midnight — five runs a day, not a run every five hours around the clock. If you genuinely need even spacing across the day, use an explicit list.

Ranges are inclusive too. `0 9-17 * * *` fires at 09:00 and at 17:00, so it is nine runs, not eight, and a job you assumed finished by 17:00 can still be starting then. Finally, remember that Sunday is `0` or `7` in standard cron but `1` in Quartz and AWS EventBridge — the reason the dialect tabs exist.

Timezones, DST and the UTC line

The timezone selector is pre-filled from your browser via Intl.DateTimeFormat().resolvedOptions().timeZone, so the next five fire times are local by default. Every preview also shows the UTC equivalent, because most schedulers — Kubernetes, CI runners, EventBridge — execute in UTC unless you configure otherwise, and "09:00" on your laptop is not 09:00 for the cluster.

Daylight saving is where a preview earns its keep. When a zone springs forward, wall-clock times inside the skipped hour do not exist locally; schedulers may skip that run or execute it twice, and behaviour differs between platforms. A daily `0 2 * * *` job in a zone that jumps from 02:00 to 03:00 is the classic case. Watch the UTC line rather than the local one to see the real instants.

Timezone rules come from the IANA database, described at iana.org/time-zones, which is what the browser uses underneath. For related date arithmetic — quarter boundaries, days between two dates, or converting a date you plan to hard-code — the Calcul Date En Ligne handles the calendar side.

Privacy, limits and how to verify

Nothing you type is transmitted. The expression parser and the next-run calculation both run client-side in JavaScript, there is no account, and pasted crontab strings never leave your machine — which matters if your schedule names internal services or maintenance windows.

The honest limitation is that the preview simulates a scheduler; it does not replace one. Cron expressions themselves carry no timezone field, so the timezone is a property of the scheduler you deploy to (a `TZ=` prefix or `CRON_TZ`, a `timeZone` parameter, or the platform's default of UTC). Platform extensions also differ: `@daily`-style macros, seconds fields, six-field year values, `?`, `L`, `W` and `#` are supported in some systems and rejected in others.

So use the tool to get the string right and to sanity-check timings, then confirm after deployment using the scheduler's own next-run display or logs. For quick one-off checks, the other browser-based utilities on FreeOnline.fyi follow the same no-login, nothing-uploaded model.

Frequently asked questions

Is the Cron Expression Generator free, and do I need an account?

Yes, it is free and requires no account. The Cron Expression Generator runs entirely in your browser, so you can open the page, build a schedule, copy the expression and close the tab. There is no sign-up wall, no usage limit and no upload of your expression to a server.

Can the Cron Expression Generator convert between standard, Quartz and AWS EventBridge formats?

Yes. The Cron Expression Generator shows the same schedule in three tabs: Standard 5-field cron for crontab, Kubernetes and GitHub Actions; Quartz 6- or 7-field with a leading seconds field and 1 = Sunday; and AWS EventBridge Scheduler's six fields ending in a year, where one day field must be `?`.

What does '0 9 * * 1-5' mean in cron?

It runs at 09:00, Monday through Friday. The fields are minute 0, hour 9, day of month `*`, month `*`, and day of week 1-5, where 1 is Monday in standard cron with Sunday as 0 or 7. It fires five times a week in whatever timezone the scheduler uses.

Why do the next fire times shift after a daylight saving change?

The preview converts each future run into the timezone you selected, and when a zone springs forward, local times inside the skipped hour never occur. Some schedulers skip such a run and others execute it twice. Check the UTC line in the output, since the underlying instant is unambiguous.

Can I paste an existing expression instead of clicking the chips?

Yes. The paste field accepts a 5-field crontab string, a Quartz 6- or 7-field string, and macros such as @daily or @hourly, then parses it back into the visual selector. If the input is invalid, an inline field-level error appears and your current schedule stays unchanged.

References

Try Cron Expression Generator free — no sign-up, works in your browser
Open the tool →

More free tools

Step-by-step guides in our blog & guides.

Free Online Square Foot Calculator Product Mockup Ai Generator Percentage Calculator محول Pdf الى وورد Video Highlight Finder Password Generator Strong Calcul Date En Ligne Usd To Sar Converter Free Resume/CV Template Generator Online Receipt Generator