Skip to main content

Cron Translator - translate cron expressions to English

At 18:00, Monday through Friday.

Next runs · UTC

Run in CrontapCheatsheet

Calendar

September 2026 · UTC

0 runs

About this tool

Paste any cron expression and CronTool translates it into a clear English sentence. “Every weekday at 09:00”, “Every 15 minutes between 09:00 and 17:59”, “On the last day of every month at midnight” - no syntax knowledge required.
The translator works for standard Unix crontab, AWS EventBridge, Vercel cron, Quartz Scheduler and other extended cron dialects. The next 30+ runs land on a calendar so you can verify the translation visually.

How cron translation works

Each field of the cron expression is parsed independently - wildcards (*), lists (1,3,5), ranges (9-17), steps (*/15), aliases (MON-FRI) and modifiers (L, W, #, ?) all get an English equivalent. The translator then stitches the field translations into a single sentence, ordered for natural reading.

Some translations are surprising. 0 0 * * 1-5 reads as “At 00:00, Monday through Friday”. But 0 0 1 * 1-5 reads as “At 00:00, on day 1 of the month, Monday through Friday” - and in standard cron, that's an OR (either condition), not an AND. The calendar clarifies whichever way your scheduler interprets it.

Cron expressions translated

  • * * * * * → Every minute.
  • */5 * * * * → Every 5 minutes.
  • 0 9 * * 1-5 → At 09:00, Monday through Friday.
  • 0 0 1 * * → At 00:00, on day 1 of the month.
  • 0 0 L * * → At 00:00, on the last day of the month.
  • 30 8,17 * * * → At 08:30 and 17:30, every day.
  • 0 0 1,15 * 1 → At 00:00, on day 1 and 15 of the month, and on Monday.

Translator vs debugger vs validator

The translator answers “what does this mean?”. The debugger answers “why is this not running when I expect?”. The tester answers “is this expression syntactically valid?”. All three use the same parser; they're different angles on the same problem.

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

Can the tool translate English back to a cron expression?

Not directly. The translator goes one way: cron → English. To compose a cron from a human description, use the cron builder - it gives you input boxes per field with examples, then writes the cron string for you.

Cron builder
How accurate is the cron translation?

The sentence combines @datasert/cronjs-parser, cronstrue, and Datasert's matcher; it is not an emulator for every scheduler. Verify dialect-specific operators and day rules against the production target.

How does the translator phrase ? in cron?

It treats ? as no specific value in one day field while the other day field carries the schedule. This operator requires a supporting extended dialect.

Question-mark operator

Timing

How do I translate a cron expression to English?

Paste the cron into the editor. CronTool validates it with Datasert's parser, translates it with cronstrue, and shows five next runs plus a calendar in the selected timezone. Expression: 0 9 * * 1-5

Open in editor
When should a translation say “every 5 minutes”?

It should say “every 5 minutes” for the step */5, which expands to minute 0, 5, 10, and so on through 55. Expression: */5 * * * *

Open in editor
Every 5 minutes guide
When should a translation say “at minute 5”?

A literal minute selects one position in each hour, so it means at minute 5 of every hour. Every 5 minutes needs the step */5. Expression: 5 * * * *

Open in editor
Minutes past the hour guide

Days and months

Why can one English sentence understate Vixie OR behavior?

Under Vixie semantics they must be read as OR. 0 9 1 * 1 means 09:00 on every Monday and on every first day of the month. Expression: 0 9 1 * 1

Open in editor
Day-field rules
What is the English translation of MON#2?

MON#2 means the second Monday of the month. 0 0 9 ? * MON#2 translates to 09:00:00 on that monthly occurrence. Expression: 0 0 9 ? * MON#2

Open in editor
Nth weekday rule
Which translation overstates a day-of-month step?

“Every seven elapsed days” overstates it. */7 in day-of-month selects dates 1, 8, 15, 22, and 29 and resets monthly. Expression: 0 0 */7 * *

Open in editor
Step operator details
Why can a grammatical translation still have no run?

The fields can still form a sentence, but next runs are the check. 0 0 30 2 * describes February 30 and therefore never matches. Expression: 0 0 30 2 *

Open in editor

Timezones and DST

Does the translated sentence guarantee a timezone?

No. The sentence describes clock fields; the selected IANA timezone controls displayed runs. Confirm that zone against the scheduler, especially for UTC-only platforms and DST.

Timezone reference

Platforms

Does the cron translator support languages other than English?

No. This page configures cronstrue for English output only.

Debugging

Can I share the translation?

Yes. Copy link preserves the cron and Extended mode when applicable. Add tz=<IANA zone> if the recipient must see the same timezone-specific runs; timezone is not included automatically.

Can the translator explain a runtime failure?

No. It translates schedules but cannot inspect your server's PATH, environment, permissions, logs, or command status, and it never executes 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