NHRepon
Home
Services
All ServicesWeb Application DevelopmentMobile Application DevelopmentDigital Marketing and SEO
ProjectsToolsProductsPostsAboutContactLogin
HomeServicesProjectsToolsProductsPostsAboutContact
  • Home
  • Projects
  • Posts
Home/Tools/Developer Tools/Cron Expression Explainer
All Tools

Cron Expression Explainer

Read a cron expression in plain English, check that every field is valid, and see the next times it will run — including the day-of-month versus day-of-week rule most people get wrong.

Five fields — minute, hour, day of month, month, day of week — or six with a leading seconds field. Names such as MON or JAN are accepted.

Field by field

Each cron field, its value and what it means
FieldValueMeaning
minute30on 30
hour9on 9
day of month*every day of the month
month*every month
day of week1-5on Monday, Tuesday, Wednesday, Thursday and Friday

Runs at minute 30 past hour 9 on day-of-week 1-5.

When will it run next?

Choose a starting point and the next five firing times appear here. They are computed in your own time zone, which is the zone a scheduler usually runs in.

Where cron comes from, and where it trips people up

Cron appeared in Version 7 Unix in 1977, named after Chronos, and the five-field layout has barely changed since. Each field is a list of values: minute, hour, day of the month, month and day of the week. A field holds a single number, a range such as 1-5, a step such as */5, a comma-separated list, or any combination of those, which is why 0,30 9-17 * * MON-FRI is readable as “on the hour and half hour, during business hours, on weekdays”.

The trap that catches almost everybody is the two day fields. Everywhere else in the expression a value has to match for the job to run, but when both day-of-month and day-of-week are restricted, cron runs the job if either one matches. So 0 0 1 * MON does not mean “the first of the month when it is a Monday” — it means “the first of the month, and every Monday”. The way to express the intersection is to put the day-of-week test inside the job command, or to use a scheduler that documents an AND rule.

Two smaller things are worth knowing. Fields are evaluated in the scheduler's local time zone, so a job that ran at 02:00 in summer can land at 03:00 after the clocks change — for anything that must hold across a daylight-saving boundary, schedule in UTC and convert. And the seconds field, where it exists at all, is an extension rather than part of the original format: Vixie cron has five fields, systemd timers and Quartz-style schedulers add more, and the meaning of a sixth or seventh field differs between them.

What does a cron expression explainer do?

A cron expression explainer reads a schedule written in the shorthand cron has used since 1977 and says what it means in words. Each of the five fields lists values rather than naming a time: minute, hour, day of the month, month and day of the week, in that order. Between them they describe every moment the job should run, and the job fires whenever the current time matches all of them.

Reading one by eye is the easy part until it is not. A field can hold a single number, a comma-separated list, a range and a step, all in the same expression, so 0,30 9-17 * * MON-FRI is a great deal of information compressed into fifteen characters. The explainer unpacks each field separately, states what it means, and then joins those statements into one sentence about when the job actually runs.

The other half of the job is catching mistakes before they reach production. Values outside a field's range, an invalid step, a mistyped month name and an expression with the wrong number of fields are all reported rather than silently reinterpreted. And because the next firing times are computed properly, the one rule that surprises everybody — that a restricted day-of-month and a restricted day-of-week are combined with OR, not AND — becomes visible instead of hypothetical.

How to read a cron expression

  1. Paste the expression, or pick one of the examples to load it into the box.
  2. Check the field-by-field table: each row shows the raw value and what it means in words.
  3. Read the summary sentence underneath, which joins the fields into one statement of when the job runs.
  4. Heed the warning if both day fields are restricted — that is the OR rule, and it is the most common cause of a job that fires far more often than intended.
  5. Choose a starting point and read the next five firing times, which are computed in your local time zone.
  6. Fix anything the tool has flagged, which includes values out of range and month or weekday names it does not recognise.

Cron Expression Explainer limits and rules

Limits, caps and standards referenced by this tool
ItemLimit
FieldsStandard five, or six with a leading seconds field
Values in a fieldSingle numbers, lists, ranges and steps, and combinations of all four
NamesMON to SUN and JAN to DEC are accepted in the day-of-week and month fields
Shortcuts@yearly, @monthly, @weekly, @daily, @hourly and @reboot
Next runsThe next five times, scanned minute by minute across roughly a year of minutes
Time zoneYour browser's local zone, which is usually the scheduler's own
Day ruleA restricted day-of-month and day-of-week are OR-ed, matching Vixie cron
Not coveredQuartz's year field, systemd OnCalendar syntax and non-standard extensions

When to use it

  • Checking a schedule you inherited in a crontab before trusting it with a backup or a bill.
  • Working out whether */15 in the minute field means every quarter hour or something else.
  • Confirming that a job meant to run on a specific weekday will not also fire on the matching date.
  • Translating a schedule a colleague described in words into an expression you can paste in.
  • Reading the next firing times to see whether a monthly job lands on a weekend.

Is it private?

The parsing and the next-run calculation happen in your browser: the expression is interpreted by JavaScript in this page and nothing is sent to a server, stored or logged.

Frequently asked questions

In order they are the minute, the hour, the day of the month, the month and the day of the week. A job runs at any moment where all five match the current time. The day of the month runs from 1 to 31 and the day of the week from 0 to 6 with Sunday as 0, though 7 is also accepted as Sunday in most implementations. Everything is evaluated against the scheduler's clock, not against an interval: cron does not schedule the next run relative to the last one.

Almost certainly the two day fields. When both day-of-month and day-of-week are restricted — that is, neither is a star — cron runs the job if either one matches, not if both do. An expression written to mean the first of the month only when it is a Monday actually means the first of the month, and also every Monday. That is standard behaviour, not a bug in a particular implementation, and the way round it is to leave one of the two fields as a star and test the other condition inside the command itself.

Every fifth value, starting from the beginning of the range, so minutes 0, 5, 10 and so on to 55. The star is the range — the whole field — and the slash introduces the step. In the minute field that gives twelve runs an hour; in the hour field */6 gives four runs a day. Writing 0/5 instead starts the count at the first value and behaves the same when the range begins at zero, which is why the two are often interchangeable in practice and not equivalent in principle.

No. The original Vixie cron uses five fields, and that is still what a crontab on a typical Linux system expects. A leading seconds field is an extension, and where it exists its position is not the only variation: Quartz puts seconds first and adds a year field of its own, while systemd uses a different notation entirely. Paste a six-field expression into an ordinary crontab and it will be rejected, so check which scheduler you are actually targeting before adding one.

Jobs run against local time, so a schedule fixed at 02:00 shifts by an hour when the clocks change, and in the spring a job set for a time that does not exist that day may fire late, twice or not at all depending on the implementation. If the exact moment matters — an invoice run, a settlement window — schedule in UTC and translate for display, rather than trusting a local-time schedule to hold steady twice a year.

Because cron is a family rather than a single specification. Vixie cron, the one you find in a traditional crontab, has five. Quartz, common in Java applications, uses six or seven and orders them differently — seconds and minutes first, then hours, day of month, month, day of week and an optional year. systemd timers abandon the format entirely in favour of OnCalendar, which is far more readable. The fields you have are a property of the scheduler, not of cron as a concept.

Related tools

  • Unix Timestamp Converter
  • Regex Tester
  • JSON Formatter
  • Hash Generator
  • JWT Decoder

Written and maintained by Md. Nur Hossain Repon.

NHRepon


Md. Nur Hossain Repon expert in NextJS, React, React Native and Flutter. He is a full-stack web and mobile application developer with 5+ years of experience and a passion for building innovative and robust application. Also, he has a strong background in developing high-quality web and mobile applications using the latest technologies and frameworks.
Let's build something amazing together 🚀

Quick Links


  • About
  • Projects
  • Services
  • Contact
  • Posts
  • Products
  • Privacy Policy
  • Terms of Service
  • Tools
  • Smart Life Hubs

Newsletter


We respect your privacy. Unsubscribe anytime.

Connect


© 2026 NHRepon. All rights reserved.

Build v1.5.4+56.73c4a90