Skip to content

Cron Expression Parser

Explain cron schedules in plain English and see next runs. Runs in your browser.

Loading tool…

About this cron expression parser

This cron expression parser turns a schedule like */15 9-17 * * 1-5 into plain English and lists exactly when it will run next. It is for developers and ops people who write crontab lines, Kubernetes CronJobs, CI schedules or scheduler config.

Type an expression or pick a preset. You get a sentence such as "Every 15 minutes, between 09:00 and 17:59, Monday through Friday", a table that shows what each field allows, and the next 5, 10 or 25 run times in any time zone. If something is wrong, the error names the field and the value, like "Hour: 24 is out of range 0-23".

Both the classic 5-field format and the 6-field format with seconds work, along with macros such as @daily, names like MON-FRI, and the special characters L and #. The builder lets you change one field at a time from a list of common choices.

Features

  • Plain-English description

    Every valid expression gets a readable sentence, in 24-hour or 12-hour time. It updates as you type.

  • Next run times in any time zone

    See the next 5, 10 or 25 runs as dates in the zone your scheduler uses, with relative time and the UTC value next to each one.

  • Field-by-field validation

    Each field is checked on its own. Out-of-range numbers, backwards ranges, a step of 0 and misplaced special characters get a specific message.

  • 5 and 6 fields, macros and names

    Seconds are detected when there are six fields. @yearly, @monthly, @weekly, @daily, @midnight and @hourly are expanded. JAN-DEC and SUN-SAT work, and 7 counts as Sunday.

  • L and # for month-relative days

    L in day of month means the last day. 5L in day of week means the last Friday. 1#2 means the second Monday of the month.

  • Builder and presets

    Edit each field directly or pick from common values like Every 15 minutes or Monday to Friday. Twelve presets cover the schedules people search for most.

How to use the cron expression parser

  1. 1Type a cron expression or pick a preset such as Weekdays at 9:00.
  2. 2Read the plain-English sentence and the field table. Errors name the field.
  3. 3Choose your server's time zone to see the next run times, or tweak fields in the builder.

When to use it

  • Checking a crontab line before deploying

    Paste the schedule part of the line and confirm that the next runs are what you expect, in the server's time zone.

  • Writing a Kubernetes CronJob

    CronJobs use the 5-field format. Set the zone here to match the job's timeZone field, or UTC if it has none.

  • Scheduling GitHub Actions

    Workflow schedules use 5 fields and always run in UTC, so choose UTC to see real run times.

  • Reviewing someone else's job

    Read an unfamiliar expression like 5 4 * * 0 or 0 0 1,15 * * as a sentence before you change it.

How do you read a cron expression?

A standard cron expression has five fields separated by spaces: minute, hour, day of month, month and day of week. The schedule fires whenever the current time matches all of them. So 30 2 * * * means at minute 30 of hour 2, every day, every month, every weekday: 02:30 daily.

Some schedulers add a sixth field at the front for seconds. Spring's @Scheduled and many Node.js libraries do this, so 0 */5 * * * * means every 5 minutes at second 0. This tool reads six fields that way.

  • * means every value.
  • 5 means exactly 5.
  • 1,15 is a list: 1 and 15.
  • 9-17 is a range: 9 through 17.
  • */10 is a step: every 10th value starting from the lowest, so 0, 10, 20 and so on.
  • 5-59/15 combines range and step: 5, 20, 35, 50.

How do day of month and day of week work together?

This is the most common cron surprise. When both day fields are restricted, standard cron runs the job when EITHER one matches, not when both do. 0 0 13 * 5 runs at midnight on every 13th of the month and also on every Friday, not only on Friday the 13th.

If you want only one of them to count, leave the other as *. Quartz-style schedulers use ? for "no specific value" in one of the two day fields. This tool accepts ? and treats it like *.

What time zone does cron use?

Classic cron uses the system time zone of the machine it runs on. Many cloud servers and containers are set to UTC, so a job written as 0 9 * * * may fire at 9:00 UTC, which is 15:00 in Dhaka or 04:00 or 05:00 in New York depending on daylight saving time.

Some platforms let you set the zone. Kubernetes CronJobs have a timeZone field (stable since version 1.27). GitHub Actions schedules always run in UTC. Pick the zone your scheduler really uses in the Time zone box to see the true run times. The time zone converter helps when you need to line up a run time with business hours somewhere else.

How is Quartz cron different from Unix cron?

Quartz, used in many Java apps, has 6 or 7 fields: seconds first, then the usual five, then an optional year. It numbers weekdays 1 to 7 starting with Sunday, while Unix cron uses 0 to 6 (and 7) starting with Sunday as 0. It also supports W for the nearest weekday. This tool follows Unix numbering, accepts a 7th year field of *, and tells you when it meets W or a fixed year.

Why use Mavros

 MavrosTypical upload sites
Seconds field5 and 6 fields, detected automatically5 fields only
Time zone for next runsAny IANA zoneBrowser local time only
Error messagesNames the field and the bad value"Invalid expression"
Special charactersL, 5L, 1#2, ?, names, macrosOften rejected
BuilderPer-field inputs with common choices, synced with the textSeparate page or Quartz only
DOM and DOW ruleWarns when both day fields are setNot mentioned

Tips

  • For every 5 minutes use */5 in the minute field. Writing 5 alone means once an hour, at minute 5.
  • Avoid scheduling many jobs at exactly minute 0. Spreading them to minutes like 7 or 23 lowers load spikes.
  • Jobs between 01:00 and 03:00 can be skipped or run twice when daylight saving time changes. Run important jobs in UTC.
  • To see how far apart two run times are, convert them with the Unix timestamp converter or the date difference calculator.
  • Use the 5L and 1#2 forms only if your scheduler supports them. Plain Vixie cron on Linux does not.
  • Browse the other developer tools for JSON, regex and JWT helpers.

Questions

What does */5 mean in cron?

Every 5th value of that field, starting from the lowest. In the minute field, */5 runs at minutes 0, 5, 10 and so on up to 55, which is every 5 minutes.

How do I run a cron job every 5 minutes?

Use */5 * * * *. With a seconds field it is 0 */5 * * * *. The next runs list confirms the times.

How do I run a job on weekdays only?

Put 1-5 in the day of week field. For example, 0 9 * * 1-5 runs at 09:00 Monday through Friday. MON-FRI works too.

What is the difference between 5-field and 6-field cron?

The 6-field form adds seconds at the front. 0 30 9 * * * and 30 9 * * * both mean 09:30 every day. Unix crontab and Kubernetes use 5 fields, while Spring and Quartz use 6 or 7.

Why does my job run on more days than expected?

Both day of month and day of week are set. Standard cron runs when either field matches, so 0 0 1 * 1 runs on the 1st of each month and on every Monday. Set one of them to * to fix it.

What does L mean in a cron expression?

In day of month, L means the last day of the month. In day of week, a number followed by L means the last such weekday, so 5L is the last Friday. Not every scheduler supports L.

Can cron run a job every 30 seconds?

Classic crontab cannot, because its smallest unit is the minute. Schedulers with a seconds field can: */30 * * * * * runs at seconds 0 and 30 of every minute.

What does @daily mean?

It is shorthand for 0 0 * * *, which runs once a day at midnight. @hourly is 0 * * * *, @weekly is 0 0 * * 0, @monthly is 0 0 1 * * and @yearly is 0 0 1 1 *.