Cron Expression Explainer

Cron Expression Explainer - Crontab to Plain English

Paste a five-field cron expression to see its meaning, each field, and the next run times. Times are calculated in your chosen time zone and in UTC, with daylight saving changes taken into account.

Explain a cron expression

Five fields: minute, hour, day of month, month, day of week. A macro such as @daily, a full crontab line with a command, or a CRON_TZ= prefix is also accepted.

Defaults to your browser time zone. An embedded CRON_TZ= value selects that zone when you change the expression.

Show 1 to 50 next runs. The default is 10.

Loading the explainer.

How to use the cron expression explainer

  1. Enter a crontab expression

    Type or paste the five time fields, or choose one of the preset chips above. A full line copied from a crontab, including the command, also works.

  2. Read the plain-English description

    The explanation and field table update as you type. If a field is out of range or uses unsupported syntax, the error names the field and the reason.

  3. Check the next run times

    Use the time zone selector to match the server or the audience, then compare the selected-zone times with UTC. The relative column shows how far away each run is.

The default expression runs every five minutes. Change the time zone before copying a schedule into a crontab on a server that uses a different local time, and confirm that the daemon supports the same day-field rule.

Cron syntax cheat sheet

A standard Unix crontab has five time fields followed by the command. The fields are separated by spaces; extra spaces between fields are accepted.

Field order and allowed values in a five-field crontab.
Field Allowed values Notes
Minute 0-59 First field. * means every minute.
Hour 0-23 Uses a 24-hour clock. Midnight is 0.
Day of month 1-31 Days that do not exist in a month are skipped.
Month 1-12 or JAN-DEC Three-letter month names, case-insensitive.
Day of week 0-7 or SUN-SAT Both 0 and 7 mean Sunday. Names are case-insensitive.
Special characters and shorthand used by this explainer.
Syntax Meaning Example
* Every value in the field. * in hour means every hour.
, A list of separate values. 1,15 in day of month means the 1st and 15th.
- An inclusive range. 1-5 in day of week means Monday through Friday.
/ A step through the field. */n starts at the field minimum. */15 in minute means 0, 15, 30 and 45.
a-b/n Every nth value inside a range. 8-18/2 in hour means 8, 10, 12, 14, 16 and 18.
n/m In cronie, starts at n and repeats every m up to the field maximum. 5/10 in minute means 5, 15, 25, 35, 45 and 55.
@daily A macro. Also @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly and @reboot. @daily is the same schedule as 0 0 * * *.
CRON_TZ= In a crontab, an assignment on its own line sets the zone for following entries. Here an inline prefix is also accepted for convenience. CRON_TZ=Europe/Warsaw 0 8 * * *

A step resets at the start of each larger unit. For example, */7 in the minute field produces 0, 7, 14, 21, 28, 35, 42, 49 and 56, then starts again at 0 in the next hour. It does not carry the remainder into the next hour.

Common cron expressions

Select an expression to load it into the explainer. Each row uses the five-field form unless it is a macro.

Twelve common schedules and their meanings. The expression cells are buttons.
Expression Meaning
Every 5 minutes
Every hour at :00
At 00:00, every day
At 09:00, Monday through Friday
At 00:00, on day 1 of the month
At 00:00, on Sunday
At 02:30, every day
At 08:00, 10:00, 12:00, 14:00, 16:00, and 18:00, Monday through Friday
At 04:30, on days 1 and 15 of the month
At 22:00, Monday through Friday
At 00:00, on day 29 of February
At 00:00, on Sunday

Day-of-month and day-of-week: the cronie OR rule

When both day fields are restricted, cronie and other Vixie-derived cron daemons use OR rather than AND. A schedule such as 0 0 1 * 1 runs on the first day of the month and also on every Monday, not only on a Monday that happens to be the first.

If one of the two day fields is unrestricted, the restricted field is the only one that filters the schedule. 0 0 1 * * runs on the first of the month regardless of weekday, and 0 0 * * 1 runs every Monday regardless of the date.

The exact cronie test is textual: a day field counts as a star field when its raw value begins with *. That includes a step such as */2. In 0 0 */2 * 1, the day-of-month field begins with *, so cronie does not apply OR. It requires both day conditions to match, which makes the job run only on Mondays that fall on an allowed odd day. This is a frequent source of confusion when a schedule is moved from one daemon to another.

This explainer follows that cronie rule and shows a note above the field table whenever OR is in effect or a stepped star field changes the combination.

Time zones and daylight saving time

A cron expression has no time zone of its own. Most daemons use the server's local time. In a cronie crontab, put an assignment such as CRON_TZ=America/New_York on its own line before the entries it affects. This explainer accepts that two-line paste, or an inline prefix for convenience, extracts the zone and selects it. The inline form shown here is not a replacement for the daemon's crontab format.

The next-run table shows each time in the selected zone and in UTC. UTC is useful when a server, a log or another team works in a different zone. The relative column is measured from the current time in your browser.

Daylight saving transitions need care. This tool works with wall-clock matches in the selected zone. When the clocks spring forward, a local time that does not exist is skipped for that day. When the clocks fall back and a local time occurs twice, the run is listed once, at the first occurrence. A job scheduled in the repeated hour therefore does not run twice in the table. Other cron implementations may handle these cases differently, so check the daemon that will actually run the job.

Limitations

Standard Unix five-field syntax only. This is not Quartz, Spring or AWS cron. Six- and seven-field expressions, seconds, ?, L, W and # are rejected with a hint instead of being guessed.

Kubernetes CronJob is close but not the same input. A CronJob manifest uses the standard five fields and has a separate timeZone field. This tool explains the schedule string; it does not read YAML or apply the manifest's time zone automatically.

systemd timers are not cron. A systemd OnCalendar= expression uses different syntax and is not translated here.

Daemon behavior varies. The day-field OR rule, CRON_TZ, supported names and DST handling differ between cronie, Vixie cron, BSD cron and job schedulers. The explanation follows cronie semantics and is a guide, not a guarantee that another daemon will run the job at the same moment.

Search horizon. Next runs are searched for up to 8 years. An impossible date such as 0 0 30 2 * returns no run within that window instead of a misleading time.

Input size. The expression field accepts up to 4,096 characters. Parsing and scheduling run on the browser main thread, so an unusually long line can briefly delay typing.

Cron expression FAQ

What does this cron expression mean?

Type or paste the five fields into the input. The explainer translates the schedule into a sentence, lists the raw value and meaning of each field, and calculates upcoming runs in the selected time zone and in UTC.

Does the tool support seconds or Quartz syntax?

No. It explains the standard Unix five-field crontab: minute, hour, day of month, month and day of week. Quartz and Spring schedules with six or seven fields, a seconds field, ?, L, W or # are outside its scope and produce an error that says so.

Why does a job run on two different day conditions?

That is the cronie day-field rule. When both day of month and day of week are restricted, the job runs when either field matches. If a day field begins with *, including */2, cronie treats it as a star field and combines the two fields with AND instead.

Which time zone are the next runs in?

They use the time zone selected above the results, which starts as your browser time zone. If the expression has a CRON_TZ= prefix, that zone is selected when the input changes. Every run is also shown in UTC so you can compare server and local times.

How are daylight saving changes handled?

Nonexistent local times in the spring-forward gap are skipped. A local time that repeats during fall-back is listed once, at its first occurrence. The selected zone's rules are applied by the browser's time zone data, so historical or future rule changes depend on that data.

Can I paste a full crontab line with a command?

Yes. The five fields are parsed and the remaining text is shown as the command. A CRON_TZ= prefix is extracted and shown separately. Environment assignments elsewhere in the line are not interpreted.

Related tools