toolready. Cron Expression Explainer

Cron Expression Explainer

Cron → plain English + next 10 fire times. Standard 5-field syntax.

min
0–59
hour
0–23
day
1–31
month
1–12
weekday
0–6
Meaning
—
Next 10 fire times (local time)
    Common patterns

    What this does

    You type a five-field cron expression and get two things back: a plain-English sentence describing the schedule, and the next ten moments it would actually fire, in your machine's local time. The English comes from the cronstrue library; the fire times come from an evaluator that expands every field into a set of allowed numbers and walks the clock forward a minute at a time until ten matches turn up. Both run in the page, so the expression never leaves your browser. Seven preset buttons fill the box if you want a starting point.

    How do I read the five cron fields?

    Left to right, separated by whitespace, with these bounds — anything outside them is rejected rather than clamped:

    1. minute — 0 to 59
    2. hour — 0 to 23
    3. day of month — 1 to 31
    4. month — 1 to 12
    5. day of week — 0 to 6, where 0 is Sunday

    A 7 in the weekday field is rewritten to 0 before parsing, so 0 0 * * 7 and 0 0 * * 0 both mean Sunday midnight. Give it four fields or six and it stops with "Expected 5 fields, got N" — six-field cron with a leading seconds column is not accepted.

    Which cron operators are supported?

    • * — every value in the field.
    • 5 — that single value.
    • 1-5 — an inclusive range.
    • 1,3,5 — a list; each item is parsed independently and the results unioned.
    • */15 — a step from the field minimum: 0, 15, 30, 45.
    • 10-30/5 — a step within a range: 10, 15, 20, 25, 30.
    • 5/10 — a bare number with a step means "from 5 to the field maximum", not "just 5".

    Not supported: month and weekday names (JAN, MON-FRI), the L/W/# extensions from Quartz, and shorthand macros. Convert a macro yourself first — @daily is 0 0 * * *, @hourly is 0 * * * *, @weekly is 0 0 * * 0.

    What time zone are the next run times in?

    Your own, formatted with a short weekday, medium date and short time. Most schedulers — cron on a server, GitHub Actions, Kubernetes CronJobs — run in UTC unless told otherwise, so if your machine is not on UTC the listed times are offset from what the runner will do. Check the runner's zone first, and shift the result with the timezone converter.

    What does a worked example look like?

    */15 * * * 1-5   →  Every 15 minutes, Monday through Friday
    
    0 9 * * 1-5      →  At 09:00, Monday through Friday
                        evaluated from Fri 17 May 2024, 10:00 local,
                        the next fire is Mon 20 May 2024, 09:00

    That Friday-to-Monday jump is the case worth checking by eye: the weekday restriction skips the whole weekend rather than firing at Saturday 09:00.

    Why does day-of-month with day-of-week behave oddly?

    Because real cron treats those two fields as an OR when both are restricted — 0 0 13 * 5 fires on every 13th and on every Friday. This tool ANDs all five fields, so it will only list dates that are both. Leave one of the two as * and the behaviour is identical. If a schedule has no match at all, the search gives up after a year of minutes and says so — usually an impossible pair like 30 February. For the timestamps in the log lines these jobs produce, see the Unix timestamp converter.