Cron Expression Generator & Explainer — Free, In Your Browser
Type a crontab expression — or start from a preset and edit it — and read it back in plain English. Every field is broken out, invalid syntax is explained, and the next runs are computed for your local timezone.
- Field order is minute · hour · day of month · month · day of week — left to right, not the other way around.
- Day of week accepts 0–7 with both 0 and 7 as Sunday, plus names like MON or MON-FRI.
- If both day fields are restricted, cron fires when *either* matches. The explainer flags this when your expression hits the quirk.
- Next-run times assume the machine runs in your browser's timezone — a server in UTC will fire at different local times.
Every conversion in this toolkit runs in your browser with the standard JS APIs. Your input is never uploaded, stored, or logged.
How a crontab line works
A cron daemon wakes once a minute and checks every installed schedule against the current time. A five-field line like `30 9 * * 1-5` matches when the minute is 30, the hour is 9, and the weekday is a weekday — so it fires Monday to Friday at 09:30. Cron has minute granularity; there is no native 'every 30 seconds'.
Some schedulers add a sixth seconds field (Quartz, Spring @Scheduled, and many task libraries). Those are not crontab format and won't parse here — the tool tells you when it sees six fields so you know the difference.
Steps, ranges, lists, and the day-fields quirk
A step `*/15` means 'every 15th value from the field's start'. A range `9-17` lists every value between the bounds, inclusive. Names work wherever you'd expect: MON-FRI, JAN-DEC. `5/10` in the minute field means every ten minutes starting at :05, not :00.
The quirk that eats people: when both the day-of-month and day-of-week fields are restricted (neither is `*`), cron treats them as OR, not AND. `0 0 13 * 5` runs at midnight on the 13th of every month *and* on every Friday — not only on Friday the 13th. If you need that, restrict one field and check the other in your script.
Frequently asked questions
What order do the five cron fields go in?
Minute (0–59), hour (0–23), day of month (1–31), month (1–12), day of week (0–7, where 0 and 7 are Sunday). A quick way to remember it: largest unit goes rightmost.
Why do the next-run times change with my timezone?
Cron expressions have no timezone — they are evaluated against the system clock of the machine running cron. This tool previews against your browser's local timezone, so if your server runs UTC you need to convert the expected times yourself.
Does @daily work everywhere?
Vixie cron and most Linux cron daemons support @yearly, @monthly, @weekly, @daily, @hourly, and @midnight (they expand to fixed expressions — @daily is 0 0 * * *). @reboot is handled by the daemon at boot and has no schedule to preview, so the tool explains it rather than parsing it.
Can I run a job every N seconds?
Not with cron — its smallest unit is one minute. The usual pattern is a cron job every minute whose script sleeps or checks elapsed time, or a proper scheduler (systemd timers with OnUnitActiveSec, or a process supervisor) if you genuinely need sub-minute cadence.