Cron Expression Parser & Builder
Paste a crontab line and read it back in plain English, or build one field by field. See the next run times in your own time zone before you ship the job.
Cron expression
Builder
How to use this parser
1. Paste the line straight from your crontab
Copy only the schedule portion — the five fields before the command. The strip underneath the box splits it apart and labels each field, so a stray space or an extra token shows up immediately instead of at 3 a.m. on a Sunday.
2. Or build it field by field
Each builder column writes straight back into the expression box. Pick a mode — every value, every Nth value, a specific list, or a range — and type the numbers. Month and day-of-week accept names too, so JAN-MAR and MON,FRI both parse.
3. Sanity-check the next run times
The description tells you what you asked for; the run list tells you what you will actually get. Those two disagree more often than people expect, especially once a step value or both day fields are involved. Scan the first few dates before you commit the change.
4. Export or share the schedule
Download the upcoming runs as CSV to paste into a change ticket, or copy the share link so a reviewer opens the exact same expression. Nothing is uploaded while you type — the parser and the forward search both run inside your browser.
Cron syntax FAQs
What do the five cron fields mean?
Reading left to right they are minute (0–59), hour (0–23), day of month (1–31), month (1–12 or JAN–DEC) and day of week (0–7 or SUN–SAT, where both 0 and 7 mean Sunday). A job fires on any minute where every field matches at once.
What do the asterisk, comma, dash and slash mean?
An asterisk means every value the field allows. A comma builds a list such as 1,15. A dash builds an inclusive range such as 9-17. A slash adds a step, so */15 means every 15th value and 9-17/2 means every second hour from 9 through 17.
Why do day-of-month and day-of-week act like OR?
It is a quirk inherited from Vixie cron. When both day fields are restricted the job runs whenever either one matches, not only when both match. So 0 0 1 * MON fires on the first of the month and on every Monday. Leave one of the two as an asterisk to avoid the surprise — this page flags the combination when it spots it.
Which time zone are the run times in?
Every date on this page is rendered in your browser's local time zone, and the ISO column carries the matching UTC offset. Servers usually run cron in UTC or in the host system time zone, so confirm the host setting before trusting a wall-clock time. Daylight-saving jumps are honoured, which is why an hourly job can appear to skip or repeat an hour twice a year.
Does it understand @daily and the other shortcuts?
Yes. @yearly, @annually, @monthly, @weekly, @daily, @midnight and @hourly are expanded to their five-field equivalents before parsing, and the expansion is shown underneath the result. @reboot has no clock schedule, so it is reported rather than projected.
Why does my expression show no upcoming runs?
The forward search stops after 366 days. Expressions that pin an impossible date, such as 0 0 30 2 * for February 30, never match at all. A narrow combination like 0 0 29 2 * only matches in a leap year, which can sit beyond the one-year window.