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
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.
No upcoming run was found in the next 4 years - double-check that the field combination is actually possible (for example, "February 31st" never happens).
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.