Paste a cron expression to get it explained in plain English and see exactly when it will run next — in your local time and in UTC. Catches the schedules that look right but fire far more often than you meant.
🔒 This tool runs entirely in your browser. Nothing you enter or upload is sent to our servers.
How to use the Cron Expression Tester
- Type or paste a cron expression, such as
*/15 9-17 * * 1-5. It is checked as you type. - Read the plain-English description to confirm it means what you intended.
- Check the list of next run times, shown in your local time zone and in UTC, and the gap between them.
About this tool
Cron syntax is five fields — minute, hour, day of month, month, day of week — and its traps are well known. */5 in the hour field means every five hours, not five minutes past. A step in the minute field with a bare * in the hour field runs all day, not once. And the day-of-month and day-of-week fields behave unlike every other pair: when both are restricted, cron runs the job if either matches, so 0 0 1 * 1 fires on the first of the month and on every Monday, not on Mondays that happen to be the first.
The safeguard against all of that is looking at actual run times, which is what this page computes. It steps forward from now using the same field-matching rules as cron itself, including that OR behaviour between day-of-month and day-of-week, and shows the gap between consecutive runs so an accidentally minute-by-minute schedule is obvious immediately.
Both the standard five-field crontab form and the six-field form with seconds first — used by node-cron, Quartz and Spring — are accepted, and the page says which it detected. Month and day names work (JAN, MON), as do ranges, lists, steps and @daily-style shorthands. Cron runs in the time zone of the machine or scheduler it lives on, so every run time is given in your local zone and in UTC; compare against whichever your server uses.
Frequently asked questions
What does */5 * * * * mean?
Every five minutes, all day, every day — 288 runs a day. The step applies to the field it is in, so */5 in the minute field is every fifth minute. Put it in the hour field instead and it means every fifth hour.
How do I run a job every day at 2:30am?
30 2 * * * — minute 30, hour 2, any day of month, any month, any day of week. Type it in above to confirm the next run times.
Why does my job run more often than I expect?
Usually a * left in a field that should be a number. 0 * * * * is hourly; 0 0 * * * is daily. Also check the day-of-month and day-of-week rule: if you set both, cron runs when either matches, which doubles up rather than narrowing down.
Is Sunday 0 or 7?
Both. Cron accepts 0 and 7 for Sunday, and the names SUN through SAT. This tester treats 7 as Sunday, as crontab does.
What time zone does cron use?
The one the machine or scheduler is set to, which is often UTC on a server and local time on a laptop. That mismatch is a common source of jobs running an hour or several hours off, especially around daylight-saving changes. Both times are shown here.
Does it support L, W and # from Quartz?
No. Those Quartz-only extras — last day of month, nearest weekday, nth weekday — are not part of standard cron and are rejected rather than quietly misread.
What do @daily and @reboot mean?
They are crontab shorthands. @daily is 0 0 * * *, @hourly is 0 * * * *, @weekly is 0 0 * * 0, @monthly is 0 0 1 * *, @yearly is 0 0 1 1 *. @reboot runs at startup and has no schedule, so it cannot be predicted.