Clever Quest Lab Tools

Cron Expression Generator

2026-10-17

Paste a standard five-field cron expression to read it in plain English and see exactly when it runs next, in your own time zone or in UTC. Or build one with simple controls, or start from a common example.

Cron expression

Also accepts names (JAN, MON), macros such as @daily, and a whole crontab line — the command after the fifth field is ignored.
In plain English

—

    Field by field
    FieldValueMatches

    Build an expression

    Pick a schedule type and adjust it. The expression above and its explanation update as you go.

    Schedule type
    On these days
    Expression: 0 9 * * 1-5

    Next run times

    Everything is calculated in your browser — nothing you type is sent anywhere.

    Common examples

    Choose an expression to load it into the box at the top.

    ExpressionRuns
    Every 5 minutes
    Every 15 minutes, on the quarter hour
    Every hour, on the hour (same as @hourly)
    Every 6 hours: 00:00, 06:00, 12:00, 18:00
    Every day at midnight (same as @daily)
    06:30 on weekdays
    Every 20 minutes during office hours on weekdays
    Noon on Saturdays and Sundays
    Midnight every Sunday (same as @weekly)
    03:00 on the 1st of every month
    Midnight on the first day of each quarter
    Once a year on 1 January (same as @yearly)
    Every 13th of the month and every Friday (the OR rule)
    29 February only, so once every leap year

    Syntax at a glance

    WriteMeaningExample
    *every value of the field* * * * * every minute
    a,ba list of values0 8,20 * * * 08:00 and 20:00
    a-ba range, both ends included0 9 * * 1-5 Monday to Friday
    */nevery n-th value, from the lowest*/10 * * * * minutes 0, 10, 20…
    a-b/nevery n-th value inside a range0 8-18/2 * * * 08:00, 10:00… 18:00
    JAN, MONnames in the month and weekday fields0 0 1 JAN * 1 January
    0 or 7Sunday in the weekday field0 10 * * 7 Sundays at 10:00

    How to use the cron expression generator

    1. Type or paste an expression into the box at the top, for example 0 9 * * 1-5. A whole crontab line works too; the command after the fifth field is ignored.
    2. Read the plain-English sentence and the field-by-field table. If the expression is invalid, the message names the field and the value that caused the problem.
    3. To build an expression instead, choose a schedule type under "Build an expression" and adjust the controls. The expression box updates as you go.
    4. Under "Next run times", choose how many runs to list (5 to 50) and whether cron runs in your local time zone or in UTC. Tick the box to see the other zone as well.
    5. Change "Start after" to list the runs after any date; "Now" returns to the current time.

    How it works

    A standard cron expression has five fields separated by spaces:

    FieldAllowed values
    Minute0–59
    Hour0–23
    Day of month1–31
    Month1–12 or JAN–DEC
    Day of week0–7 or SUN–SAT (0 and 7 are both Sunday)

    Inside a field, * means every value, a-b is a range including both ends, a,b,c is a list, and /n adds a step. In the minute field */15 means 0, 15, 30 and 45, and 1-30/5 means 1, 6, 11, 16, 21 and 26. A step restarts every hour: */7 gives 0, 7 … 56 and then 0 again. Macros are shortcuts, for example @daily = 0 0 * * * and @weekly = 0 0 * * 0; @reboot runs once when the cron daemon starts and has no schedule.

    A given minute is a run time when all of the following hold:

    run if minute in M and hour in H and month in Mo and the day rule holds day rule: a day field starts with * → dom in D AND dow in W neither starts with * → dom in D OR dow in W

    M, H, D, Mo and W are the value sets of the five fields, dom is the day of the month and dow the day of the week (0 = Sunday). The tool walks forward from the start time one calendar day at a time, keeps the days that pass the month test and the day rule, and takes every allowed hour and minute of each kept day in order. Month lengths and leap years come from the calendar (a leap year is divisible by 4, except century years not divisible by 400). Only runs strictly after the start time are listed; the search looks up to 400 years ahead.

    Examples

    Office hours. */20 9-17 * * 1-5 in UTC, starting Friday 16 October 2026, 17:30, gives Fri 16 Oct 17:40, then Mon 19 Oct 09:00 and 09:20. Nothing runs at 18:00, because hour 18 is outside 9-17.

    Both day fields set. 0 0 13 * 5 in UTC, starting 1 November 2026, gives Fri 6 Nov, Fri 13 Nov, Fri 20 Nov, Fri 27 Nov, Fri 4 Dec, Fri 11 Dec and Sun 13 Dec, all at 00:00. It runs on every Friday and on every 13th; 13 November 2026 is both, and the job still runs once.

    Day 31. 0 0 31 * * starting 1 January 2026 runs on 31 January, 31 March, 31 May, 31 July, 31 August, 31 October and 31 December: seven times a year. Shorter months are skipped, not moved to the 30th.

    Clock change. On a device set to Central European Time, 30 2 * * * starting Friday 27 March 2026, 12:00, lists Sat 28 Mar 02:30 (UTC+1), Sun 29 Mar 03:00 (UTC+2) marked "Moved", and Mon 30 Mar 02:30 (UTC+2). On 29 March the clocks jump from 02:00 to 03:00, so 02:30 does not exist that night.

    Day of month or day of week: the OR rule

    When one of the two day fields starts with * (a plain *, or a step such as */2), classic cron requires both fields to match; with a plain * that simply means the other field decides. When both are restricted, a day runs if it matches either of them. 0 0 1 * 1 therefore runs on the 1st of every month and on every Monday, not only on Mondays that fall on the 1st. Cron cannot say "the first Monday of the month" on its own; the usual workaround is 0 0 1-7 * * plus a check in the command that today is a Monday. This is the behaviour of Vixie cron, used on most Linux systems.

    Daylight saving time and time zones

    Cron follows the wall clock of the machine it runs on. Many servers use UTC, which has no clock changes, so set "Cron runs in" to match the server, not your own computer. In a zone with daylight saving time, Vixie cron and the daemons derived from it treat the two change nights as follows, and the tool shows the same:

    Affected rows are marked "Moved" or "Repeated". Other schedulers may handle these nights differently; if the exact number of runs matters, avoid 01:00–03:00 local time or use UTC.

    Common mistakes

    Frequently asked questions

    How do I run a job every 5 minutes?

    Use */5 * * * *. It runs at minutes 0, 5, 10 and so on up to 55 of every hour, aligned to the clock, not to the moment you saved the crontab.

    How do I run a job on the last day of the month?

    Standard cron has no "last day" value. Run on days 28 to 31 and let the command check that tomorrow is the 1st, for example with GNU date: 0 23 28-31 * * [ "$(date -d tomorrow +\%d)" = 01 ] && your-command.

    Does cron support seconds?

    No. The smallest unit is one minute.

    Which time zone does cron use?

    The local time of the machine, normally the system time zone. Some cron versions also accept a CRON_TZ= line that sets the zone for one crontab. Run date on the server to see its zone.

    Is anything I type sent to a server?

    No. Parsing and the run-time calculation happen in your browser. The expression and your settings are saved only in this browser's local storage, and nothing is uploaded.

    Related tools