Also available in: Español · Português · Français · العربية
Cron Expression Parser
Paste any five-field cron expression and get a plain-English summary, a field-by-field breakdown, and the next ten run times in your own time zone.
What is a cron expression?
A cron expression is the five-field line that Unix cron, and the great many job schedulers built since, use to say when a task should run. Reading one by eye is where most of the confusion starts, because each field is independently flexible and a single character can change the meaning of the whole schedule. This cron expression parser exists to remove that guesswork: paste the expression in and get back the sentence a person would use to describe the same schedule.
The five fields, in order, are minute (0 to 59), hour (0 to 23), day of month (1 to 31), month (1 to 12, or the first three letters of the month's name), and day of week (0 to 7, where both 0 and 7 mean Sunday, or the first three letters of the day's name). Within a field, a range is written with a hyphen and is inclusive on both ends, a list is comma-separated, and a step is written with a slash and applies after a range or after an asterisk. Names are matched without regard to case and work inside ranges and lists as well as on their own.
Cron also accepts a handful of nicknames in place of the five fields, and this parser understands them too. @yearly and @annually both mean 0 0 1 1 *, @monthly means 0 0 1 * *, @weekly means 0 0 * * 0, @daily and @midnight both mean 0 0 * * *, and @hourly means 0 * * * *. The one common nickname left out on purpose is @reboot, which runs at startup rather than on a schedule, so there is no run time for a parser to compute.
How to read a cron expression
- Enter the expression. Type or paste a five-field cron expression, or a nickname such as @daily, into the box at the top of the page.
- Read the summary and the field table. A plain-language sentence explains the whole schedule, and the table beneath it breaks the expression into its five fields, showing exactly what was written and the values it expands to.
- Set your time zone and check the next ten runs. Pick a zone from the picker, which defaults to your own, and scan the list of upcoming run times, each one flagged if daylight saving makes it skip or repeat.
The rule almost everyone gets backwards
The single most useful thing this page can tell you is also the fact that trips up the most people. In a standard cron expression, the day-of-month field and the day-of-week field are not both required to match at once. Whenever both of them carry an actual restriction, they are combined with OR, not AND.
This is not a quirk of one implementation; it is what the specification says outright. The crontab(5) manual page states it in one sentence: “if both fields are restricted (i.e., do not contain the '*' character), the command will be run when EITHER field matches the current time.” There is no AND in that sentence, and there never was.
That is why 0 0 13 * 5 does not mean “Friday the 13th.” It looks like it should, but it actually means midnight on the 13th of any month, or midnight on any Friday, whichever comes first. Counted across 2026, that expression matches 61 days, while an actual Friday the 13th occurs only 3 times that year.
Standard cron simply has no syntax for “both conditions at once,” so there is no expression that fires on Friday the 13th and only Friday the 13th. The usual fix is to schedule the job more often than you need, daily or hourly, and have the job itself check the date before it does anything, which puts the AND logic in the script rather than in the schedule.
Daylight saving, and where cron implementations disagree
Daylight saving is not an edge case this tool stumbles over; it is written into the specification cron itself follows. The crontab(5) manual page says that non-existent times, such as the missing hours during the daylight saving conversion, will never match, so jobs scheduled during those missing times will not run, and that times which occur more than once will cause matching jobs to run twice. This parser reproduces exactly that instead of silently picking one answer, which is why a run list can carry a warning on a time that never happened and a separate marker on a time that happened twice in the same day.
For New York in 2026, where clocks move forward on 8 March and back on 1 November, this plays out concretely. A job set to run at 02:30 every day does not run at all on 8 March, because 02:30 does not exist that day. A job set to run at 01:30 every day runs twice on 1 November, an hour apart, because 01:30 happens twice. Even an hourly job feels it: 0 * * * * runs 23 times on 8 March instead of 24, and the missing run is the one at 02:00.
One place cron parsers genuinely disagree is what counts as a “restricted” field for the OR rule above, and this tool follows cron's own source rather than the more common reading. In that source, the flag marking a day field as unrestricted is set from the field's first character before the rest of the field is parsed, so */9 is treated as an asterisk and counted as not restricted, even though it is plainly more specific than a bare *. Rather than assume that was right, 5,076 randomly generated expressions were run against a widely used reference implementation; 1,262 disagreed, and every one of those disagreements traced back to this same first-character rule, with nothing left unexplained.
The list of upcoming runs also looks ten years ahead, and that number was chosen rather than rounded off. The sparsest legal expression, 0 0 29 2 *, only matches the 29th of February, and a skipped century can push two leap years eight years apart, so a shorter horizon could show a single matching date and then wrongly look like the schedule had run out.
Why is it free?
Everything above runs in your browser. Parsing the expression, building the field table, and working out the next ten run times is plain JavaScript running on your own machine, so nothing about your schedule, your time zone, or the command you plan to run is ever sent anywhere. There is no account to create and no email address to hand over.
There is no watermark on the result either, because there is no server call for one to be attached to. Free means free: the tool costs nothing to run, so there is nothing to charge for.