Cron Expression Parser

Type a 5-field cron expression (minute, hour, day of month, month, day of week) to see its plain-English description and the next upcoming run times. Supports *, ranges (1-5), lists (1,15,30), steps (*/15), month/day names (MON, JAN) and the @daily, @hourly, @weekly, @monthly, @yearly shorthands. Everything is computed in your browser.

Quick examples

Fields

Minute
Hour
Day of month
Month
Day of week

In plain English

Next run times

Computed using your browser's current date and timezone. If this cron runs on a server in a different timezone, the actual times will differ.

    Frequently asked questions

    What are the 5 fields of a cron expression?

    In order: minute (0-59), hour (0-23), day of month (1-31), month (1-12 or JAN-DEC) and day of week (0-6, where 0 is Sunday, or SUN-SAT). Classic cron format has no seconds field; some tools (like Spring or Quartz schedulers) use 6 fields by adding seconds at the front, but this tool works with the standard 5-field Unix/Linux format.

    What do *, /, - and , mean?

    The asterisk (*) means "any value". The slash (/) defines a step, e.g. */15 in the minute field means "every 15 minutes". The dash (-) defines a range, e.g. 1-5 means "1 through 5 inclusive". The comma (,) separates a list of individual values, e.g. 1,15,30. These can be combined, e.g. 10-30/5 means "every 5 units between 10 and 30".

    What happens if I restrict both day-of-month AND day-of-week?

    When both fields are restricted (neither is *), cron combines them with OR, not AND: the job runs if either condition is met, not only when both are. For example, "0 0 1 * 1" runs both on the 1st of every month and on every Monday, not only when the 1st happens to fall on a Monday. This behavior often surprises people and is a common source of scheduling bugs.

    What do @daily, @hourly, etc mean?

    They're shorthands for full cron expressions: @yearly/@annually is "0 0 1 1 *" (once a year), @monthly is "0 0 1 * *", @weekly is "0 0 * * 0", @daily/@midnight is "0 0 * * *", and @hourly is "0 * * * *". They're supported by Vixie/cronie cron and systemd timers, but not every system accepts them - if you're unsure, the equivalent 5-field expression is more portable.

    Is my expression uploaded to a server?

    No. Parsing, the plain-English description and the next-run calculation all happen entirely in JavaScript in your browser. Nothing is ever sent to a server.