Cron Expression Parser

Parse a cron schedule into a plain field breakdown and preview its next run times, right in your browser.

Cron expression

Next runs

(your local time)

Enter a cron expression to parse it.

Your cron expression is parsed in your browser. Nothing is sent to BroBroGo.

FAQ

What cron syntax does this tool support?

Standard 5-field cron — minute, hour, day of month, month, and day of week — including ranges (1-5), steps (*/15), lists (1,15), named months and weekdays (JAN, MON), and the @yearly/@monthly/@weekly/@daily/@hourly shortcuts. One easy-to-miss rule: when both day-of-month and day-of-week are restricted (not *), a match on either one is enough — they don't have to agree.

What timezone are the next run times shown in?

Your browser's local timezone — the same one your system clock uses. Standard cron doesn't carry a timezone of its own; the job scheduler running it decides that, so treat these times as a preview of your own local schedule, not necessarily the server's.

Why does it say this schedule can never occur?

Usually a day-of-month value that doesn't exist in every selected month — for example, day 31 with April, June, September, or November in the month field. Pick a day that exists in all the months you've listed, or split the schedule into separate expressions.

Understanding the Components of a Cron Expression

A cron expression is a compact, single-line text string used to define execution schedules for automated tasks. Standard cron syntax relies on five distinct fields separated by spaces. Each field represents a specific unit of time, ordered from left to right:

  1. Minute: Controls the minute of the hour when the task executes.
  2. Hour: Controls the hour of the day.
  3. Day of month: Specifies the calendar day.
  4. Month: Specifies the month of the year.
  5. Day of week: Specifies the day of the week.

The Cron Expression Parser breaks down these five fields into a readable format. For example, a wildcard * in any field is parsed and displayed as "Any". When step values are used, such as */n, the parser translates them into descriptive intervals. Depending on the field where the step is applied, the output displays "Every {n} minutes", "Every {n} hours", "Every {n} days", "Every {n} months", or "Every {n} days".

Supported Syntax and Common Shortcuts

This tool supports standard 5-field cron expressions and several common syntax variations:

  • Ranges: Hyphenated values defining a span of time, such as 1-5.
  • Steps: Incremental values defined with a slash, such as */15.
  • Lists: Comma-separated values to specify multiple execution points, such as 1,15.
  • Names: Three-letter abbreviations for months (e.g., JAN) and weekdays (e.g., MON).
  • Shortcuts: Standard pre-defined schedules including @yearly, @monthly, @weekly, @daily, and @hourly.

An example of a valid input combining these elements is */15 9-17 * * MON-FRI.

This parser does not support a sixth "seconds" field, nor does it support Quartz-specific extensions such as L, W, or #.

The Interaction Between Day of Month and Day of Week

A critical rule in cron scheduling is the interaction between the day of month and day of week fields. When both of these fields are restricted—meaning neither contains the wildcard *—they do not act as a strict logical "AND". Instead, a match on either field is sufficient to trigger the schedule. For example, if you restrict the schedule to run on the 15th of the month and also on Mondays, the task will execute on the 15th of the month as well as every Monday, rather than only on Mondays that fall on the 15th.

Handling Impossible Schedules and Validation Errors

When parsing a cron expression, the tool validates both the syntax and the logical feasibility of the schedule.

If the input is empty, the tool returns to a "ready" state and displays "Enter a cron expression to parse it.". If the expression contains syntax errors, the tool displays "Invalid cron expression".

A unique edge case occurs when an expression is syntactically valid but represents a schedule that can never physically run. This typically happens when a specific day of the month is requested alongside months that do not contain that day. If you specify day 31 in the day of month field, but restrict the month field to months like April, June, September, or November, the schedule is impossible to satisfy. In this scenario, the tool displays the error: "This schedule can never occur — check for a day of the month that doesn't exist in every selected month".

How Timezones Affect Scheduled Tasks

The cron expression itself does not contain timezone information. When you input an expression, the tool calculates the upcoming execution times and displays them in your browser's local timezone, accompanied by the label "(your local time)".

Because the underlying cron daemon on a server executes tasks based on its own system clock, the actual execution times may differ if your server runs on a different timezone (such as UTC) than your local machine. The preview list, which can be adjusted using the "Count" input to show between 1 and 20 upcoming runs, serves as a local translation of the schedule for verification purposes.

Client-Side Processing and Privacy

Your privacy is maintained during the debugging process. Every calculation, syntax check, and timezone translation is performed directly within your web browser. Your cron expression is parsed in your browser, and nothing is sent to BroBroGo.


Frequently Asked Questions

What cron syntax does this tool support?

Standard 5-field cron — minute, hour, day of month, month, and day of week — including ranges (1-5), steps (*/15), lists (1,15), named months and weekdays (JAN, MON), and the @yearly/@monthly/@weekly/@daily/@hourly shortcuts. One easy-to-miss rule: when both day-of-month and day-of-week are restricted (not *), a match on either one is enough — they don't have to agree.

What timezone are the next run times shown in?

Your browser's local timezone — the same one your system clock uses. Standard cron doesn't carry a timezone of its own; the job scheduler running it decides that, so treat these times as a preview of your own local schedule, not necessarily the server's.

Why does it say this schedule can never occur?

Usually a day-of-month value that doesn't exist in every selected month — for example, day 31 with April, June, September, or November in the month field. Pick a day that exists in all the months you've listed, or split the schedule into separate expressions.