Cron Expression Parser
Translate a five-field cron expression into plain English and list the next five times it fires. A description on its own is only half-trusted, so the actual dates come with it.
min hour day month weekday
Runs at 9:0 on Mon·Tue·Wed·Thu·Fri
- min
- 0
- 0
- hour
- 9
- 9
- day
- *
- 31 values
- month
- *
- 12 values
- weekday
- 1-5
- 1,2,3,4,5
Setting both day-of-month and weekday makes it run when either matches (OR) — the rule people get wrong most often. That is why the actual dates are shown rather than described. Times follow this browser's timezone, which may differ from your server's.
What each field accepts
* means every value, 1,15 a list, 1-5 a range, */10 a step. A step can follow a range, as in 1-5/2. Months may be written jan to dec and weekdays sun to sat, in any case. Weekday 7 is Sunday, the same as 0. L, W, #, ? and shorthands like @daily are not read — they are extensions absent from Linux cron.
How the next runs are found
Starting one minute from now, time advances a minute at a time until five moments satisfy all five fields. It is less a calculation than turning calendar pages, so 0 0 31 * * correctly skips months without a 31st and 0 0 29 2 * lands only on leap years. If five runs cannot be found within four years, only those found are shown — a date that never comes, like February 30th, shows nothing.
The time it means versus the time it runs
The next runs are computed with this browser's clock and time zone. A server in another zone differs by the offset, and in a region with daylight saving, the day the clocks change either skips a run or doubles one.
Frequently asked questions
What happens if I set both day-of-month and day-of-week?
It runs when either one matches, not both. So 0 0 1 * 1 does not mean the first of the month when that day is a Monday — it means the first of every month and every Monday. This is the most commonly misread rule in cron, which is why the next run times are shown alongside.
Does it handle second-level cron?
Five fields only (minute, hour, day of month, month, day of week). Six-field expressions are an extension used by Quartz and some libraries, where the leading field is seconds. In that case, drop the first field before pasting.
Which time zone is used?
Your browser's. If the server runs in UTC, the real run times will differ.
Some expressions have six fields.
Those put seconds at the front. This reads the five-field form — minute, hour, day, month, weekday — which is what Linux cron and most schedulers use. Paste a six-field expression and every field shifts by one, so drop the seconds first.
Which time zone are the next runs in?
The upcoming times are shown in this browser's time zone. If the job actually runs on a UTC server, they will differ by that offset — the usual trap when scheduling something overnight.
How do I run on the last day of the month?
Five-field cron has no notation for it; L is a Quartz extension. On Linux the usual approach is 0 0 28-31 * * with a check inside the script for whether tomorrow is the 1st. Pasted here, all of the 28th through 31st appear in the next runs.
Is the schedule in GitHub Actions the same syntax?
The five fields are the same, but the time zone is always UTC. 9 AM in Seoul or Tokyo is 0 0 * * *. This page shows times in the browser's zone, so paste the value with your offset subtracted and check the next runs against it.
Does anything I paste get sent to a server?
No. Everything runs inside your browser and nothing is uploaded or stored. That is why you can use it on things you would not normally paste into a web page, like an internal config file or a production query. It also works with your network disconnected.