Skip to main content

Cron Evaluator - evaluate when a cron expression runs

At 02:00, only on Sunday.

Next runs · UTC

Calendar

September 2026 · UTC

0 runs

About this tool

Paste any cron expression and CronTool evaluates exactly when it will fire next. Each minute is checked against every field; matches are plotted on a calendar; the English description summarises the cadence. No installation, free, runs entirely in your browser.
Evaluation is the missing step between “does the cron parse?” and “does the cron fire when I want?”. The calendar makes the gap impossible to miss - visualising 30+ runs is worth a thousand words of documentation.

What the cron evaluator computes

  1. Parse the expression and validate every field.
  2. Walk forward in time from the current moment, minute by minute, checking each minute against the expression.
  3. Collect matches until 30+ are found (or a reasonable horizon is reached).
  4. Plot the matches on a real calendar in your local timezone.
  5. Describe the schedule in English using cronstrue.

Evaluation edge cases worth checking

  • Empty schedule - 0 0 31 2 * parses fine but never fires (Feb 31 doesn't exist). The calendar will be blank.
  • Sparse schedule - 0 0 29 2 * fires only on leap-year Februaries. The calendar may show only one match in the next 365 days.
  • Dense schedule - * * * * * fires every minute. The calendar shows the next 30 minutes.
  • End-of-month edge - 0 0 31 * * fires only in months with a 31st (Jan, Mar, May, Jul, Aug, Oct, Dec). Spot the gaps in February, April, June, September, November.

Evaluator vs tester vs validator

All three confirm a cron is “correct”, but they answer different questions. The cron tester answers “is the syntax valid?”. The cron evaluator answers “when will it actually run?”. The cron debugger answers “why isn't it running when I expect?”. In practice you use whichever framing feels closest to the question in your head.

Examples

  • 0 18 * * *
    Every day at 18:00
  • 0 */5 * * *
    Every 5 hours
  • 0 18 * * 1-5
    Weekdays at 18:00
  • 0 0 1 * *
    Once a month, on the 1st at midnight

Cheatsheet

Full cheatsheet
FieldReq.RangeWildcards
minuteyes0-59, - * /
houryes0-23, - * /
day of monthyes1-31, - * /
monthyes1-12 or JAN-DEC, - * /
day of weekyes0-6 or names; some dialects use 0-7 or 1-7 — see Dialects, - * /

Frequently asked questions

Syntax

Which evaluation happens before future-time search?

Field validation happens first. The evaluator checks field count, token syntax, and ranges before calculating future matches, then highlights the field behind a humanized parser error.

Cron field ranges

Timing

How do I evaluate a cron expression?

Paste the cron to validate it, read its English meaning, list five future matches, and inspect runs in a navigable month calendar. The mobile agenda shows up to 30 runs from the visible month.

Can I evaluate a cron from a specific start date?

No. The five-run evaluator starts from now; the page has no arbitrary start-date control. The month calendar can navigate to other months and computes that visible month's runs separately.

Can I evaluate multiple crons at once?

Yes. The multi-cron visualizer plots the visible month's runs together and automatically lists up to five expression pairs that fire in the same minute.

Multi-cron visualizer

Days and months

When can the evaluator confidently report “never”?

Only a limited static check reports “never” for fixed day/month combinations. 0 0 30 2 * qualifies because February 30 cannot exist; zero matcher results alone do not prove that outcome. Expression: 0 0 30 2 *

Open in editor
Can the evaluator handle leap-day schedules?

Yes. 0 0 29 2 * evaluates only on February 29 in leap years, so expect long gaps between displayed runs. Expression: 0 0 29 2 *

Open in editor
Leap-day rule
How does the evaluator apply day-of-month and day-of-week?

In Standard Vixie semantics, two restricted day fields are ORed. 0 9 1 * 1 evaluates on every Monday and every first day of a month. Expression: 0 9 1 * 1

Open in editor
Day-field rules
Why can evaluated gaps change at month boundaries?

A day-of-month step restarts at day 1 each month. 0 0 */7 * * selects dates 1, 8, 15, 22, and 29 rather than preserving a seven-day elapsed gap. Expression: 0 0 */7 * *

Open in editor
Step operator details
How is an nth-weekday expression evaluated?

0 0 9 ? * MON#2 evaluates to 09:00:00 on the second Monday of each month in a Quartz-style extended dialect. Expression: 0 0 9 ? * MON#2

Open in editor
Nth weekday rule

Timezones and DST

Which timezone does cron evaluation use?

The selected IANA timezone supplies the clock for next-run timestamps and the calendar. Match it to your scheduler, because Vercel uses UTC while other platforms expose timezone settings.

Timezone reference
What should I inspect around a DST transition?

Evaluate a fixed 01:00-03:00 local schedule across the transition. A spring-forward time may not exist, while a fall-back time may occur twice under Vixie cron. Expression: 30 2 * * *

Open in editor
DST behavior

Platforms

Can the evaluator calculate Quartz and AWS-style crons?

It can preview many extended forms, but Extended mode is not a dialect validator and does not enforce every AWS or Quartz rule. Use Copy as and the dialect matrix, then test with the target scheduler.

Dialect matrix

Debugging

How accurate is the cron evaluation?

CronTool uses @datasert/cronjs-parser and @datasert/cronjs-matcher with a 1,000-iteration cap. It is a preview, not an emulator for every scheduler; verify dialect rules and DST behavior against the production target.

How can someone reproduce my evaluation context?

Share cron=<expression>, add mode=extended when needed, and add tz=<IANA zone> for matching timestamps. The built-in Copy link does not preserve timezone.

What remains outside computed cron evaluation?

Runtime execution remains outside evaluation. CronTool cannot inspect PATH, environment variables, permissions, host downtime, queueing, overlap, or command success, and it does not run commands.

Write the cron here. Run it on Crontap.

Point Crontap at any URL. Pick any cron. Done.

WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.

1.9k+ teams · Free forever tier · No credit card