Cron Expression Parser
Read a cron expression in plain English and see when it next fires.
Paste a cron expression on the left.
How it works
Five fields, or six when the first one is seconds: minute, hour, day of month, month, day of week. Reading one is mostly mechanical. One rule inside it is not, and it is the rule that makes schedules misfire.
The two day fields are OR, not AND
0 0 13 * FRI does not mean Friday the 13th. When both the day-of-month and day-of-week fields are
restricted, cron fires on any day matching either — so that expression runs on the 13th of every month
and on every Friday, roughly sixty times a year instead of one or two. This is Vixie cron's behaviour, which is
what crontab, most container schedulers and Cloudflare's own triggers implement. Whenever both fields are set, the
output says so before it says anything else.
A cron expression has no timezone
There is no field for one. Run times here are computed in UTC and shown with your local equivalent beside them, labelled — but what your own server does depends on how that machine is configured, which the expression cannot tell you and this page will not guess.
Steps are not always what they look like
*/15 in the minutes field is 0, 15, 30, 45. 5/15 is 5, 20, 35, 50 — a bare value with a
step starts there and runs to the end of the range. And 0,15,30 is a list, not a step: it stops
before the end of the hour, so it is described as three times rather than as "every 15 minutes".
Example
@daily expands to 0 0 * * *. 0 0 29 2 * next fires on 29 February 2028 —
found by stepping days rather than seconds, which is why a four-year gap costs nothing. 0 0 30 2 *
returns no runs at all, because 30 February does not occur.
Frequently asked questions
Does 0 0 13 * FRI mean Friday the 13th?
No, and this is the single most common way a cron schedule turns out to run far more often than intended. When both the day-of-month and day-of-week fields are restricted, cron fires on days matching either one — so that expression runs on the 13th of every month and on every Friday. The tool says so explicitly whenever both fields are set.
Which timezone are the next run times in?
UTC, with your local equivalent shown beside each one. A cron expression has no timezone field, so the answer for your own server depends on how that machine is configured — the tool cannot know it and does not pretend to.
Does it support the six-field form with seconds?
Yes. Five fields is standard crontab; six means the first one is seconds, which is what Quartz, Spring and several container schedulers use. The tool reports which form it read so a misplaced field shows up as a wrong description rather than a silent hour shift.
Why is 5/15 not the same as */15?
A bare value with a step starts at that value and runs to the end of the range, so 5/15 in the minutes field is 5, 20, 35 and 50 — not 0, 15, 30, 45. It is a small difference that moves every run by five minutes.
It found no run times for my expression — is that a bug?
Probably not. Some expressions are satisfiable only in theory: 0 0 30 2 * asks for 30 February, which never occurs. The tool searches eight years ahead and reports finding nothing rather than inventing a date or spinning.
Does this work for a GitHub Actions on.schedule cron?
Yes — GitHub Actions workflow schedules use the same standard five-field crontab syntax this tool already parses, always in UTC, so paste the value straight from a workflow's on.schedule.cron line. Two things GitHub adds on top that this tool cannot show, because they are scheduler behaviour rather than part of the expression itself: a scheduled workflow run can be delayed up to several minutes past its exact trigger time under high GitHub Actions load, and a schedule on a repository with no activity for 60 days is automatically disabled until someone pushes a commit.
Related tools
Unix Timestamp Converter
Convert between Unix time and readable dates in UTC or local time.
LocalTimezone Converter
Convert a date and time between IANA time zones, or find the gap between two instants.
LocalURL Parser
Split a URL into scheme, host, path, query and fragment.
Localchmod Permission Calculator
Convert between 755 and rwxr-xr-x, special bits included, in both directions.
LocalSAML Response Decoder
Decode a SAMLResponse and read its issuer, subject, conditions and attributes.
LocalJSON Diff
Compare two JSON documents and see what actually changed, independent of formatting.
Local