DataFormatter

Cron Expression Helper

Read, validate and schedule cron expressions in your browser. Paste any 5- or 6-field expression to get a plain-English description plus the next (or previous) runs in any time zone.

About this tool

What is it?
DataFormatter Cron Expression Helper is a free online tool that validates 5- and 6-field cron expressions, describes them in plain English and lists next or previous runs in any time zone.
Who is it for?
Developers and system administrators who need to verify a cron schedule or translate it into plain language.
What makes DataFormatter's tool different?
It is DST-aware and fully client-side — nothing is uploaded, and you can read schedules in plain English.

Cron expression

Five fields is standard. Names like JAN or mon also work, as do ranges, lists and steps.

yesvalidmin · hr5 fields

What it means

describeCron

at 02:00 at minute 30.

Next runs

relative to now
#In UTCYour local time
1Wed2026-09-30 02:30:00Wed2026-09-30 02:30:00
2Thu2026-10-01 02:30:00Thu2026-10-01 02:30:00
3Fri2026-10-02 02:30:00Fri2026-10-02 02:30:00
4Sat2026-10-03 02:30:00Sat2026-10-03 02:30:00
5Sun2026-10-04 02:30:00Sun2026-10-04 02:30:00
6Mon2026-10-05 02:30:00Mon2026-10-05 02:30:00
7Tue2026-10-06 02:30:00Tue2026-10-06 02:30:00
8Wed2026-10-07 02:30:00Wed2026-10-07 02:30:00

Quick start

  1. Type or paste a cron expression (like 30 2 * * *).
  2. Read the plain-English description to confirm you said what you meant.
  3. Pick a time zone — or keep UTC — and choose Next or Previous runs.
  4. Scan the table; every row also shows your local time.
  5. Copy the runs or the description into your ticket or CI config comment.

Cron syntax this tool reads

  • Century-safe five-field input: minute (0-59), hour (0-23), day-of-month (1-31), month (1-12), day-of-week (0-7 with 0 and 7 both Sunday).
  • Optional sixth leading seconds field — useful for 6-field Quartz/Node-schedule style jobs.
  • Name shortcuts: JAN…DEC for months, SUN…SAT for weekdays (case-insensitive).
  • Ranges 1-5, steps */15, combined lists 0,15,30,45, and the ? wildcard treated like *.
  • DST-safe scheduling — a 16:00 UTC run stays 16:00 UTC across a 21:00 CET summer/winter change.

How to check a cron expression online

  • Paste an expression straight from a crontab, GitHub Actions schedule, or a code constant.
  • Confirm the prose description — this catches the classic swapped day-of-week / day-of-month divergence.
  • Switch zone to verify a job you configured for users elsewhere actually runs at a sane hour there.
  • Copy the run list as plain text for docs or an excuse-free ticket.
Cron expression
30 2 * * *
Plain-English description
At 02:30 every day (second 0).

Who checks cron expressions — and when

Verifying before you deploy

A mailer job set for '5 * * * *' runs 24 times a day. The description would've told you that the moment you typed it — check before the first at-scale run, not after.

Coordinating with remote teams

Your batch job must hit a database that Pauses between 00:00-01:00 Europe/Paris. Pick that zone and see exactly when it fires.

Learning cron grammar

Try presets, watch the prose change, and get an intuition for steps, lists and ranges without consulting man pages.

When runs look wrong

"Every minute" fires fewer times than expected

Why: A six-field expression with a seconds value other than 0 narrows the window (e.g. */20 seconds runs every 20 seconds, not every minute).

Fix: Check the leading field; toggle Include seconds to see what the 6th column is doing.

A 02:30 Europe/Paris job is missing one spring day

Why: DST: 02:00-03:00 doesn't exist on that date, so the job cannot run.

Fix: That's correct behavior — most schedulers skip it too. Pick an hour outside the gap if it matters.

Job fires on unexpected weekday

Why: Day-of-month and day-of-week are OR'd when both are specified (Vixie semantics), so '0 0 13 * 5' fires Friday AND the 13th.

Fix: Use a guard inside the job, or move to a single day column with an explicit range.

Pro tips

  • Presets are one click — 'Every minute', 'Daily 02:30', 'Weekdays 08:15' — then edit from there.
  • Combine with the Timestamp tool to verify the exact UTC instant of a tricky run.
  • The description text copies cleanly into READMEs and CI comment blocks.

Frequently asked questions

What cron syntax is supported?

The standard five fields (minute hour day-of-month month day-of-week) plus a six-field variant with a leading seconds column. Lists, ranges (1-5), steps (*/15 or 0-30/10), both * and ? wildcards, and month/day name shortcuts like JAN or mon all work.

What does the description actually compute?

It renders your expression as prose — for example 'at 02:30 every day' or 'every 20 seconds'. It's generated from the parsed fields, so it always matches exactly what the expression means.

Why do my runs differ from other calculators?

Two reasons: this tool is time-zone aware (DST transitions are handled by matching local wall time, skipping nonexistent hours and avoiding repeats), and the day-of-month + day-of-week rules follow Vixie cron semantics, where either field matching is enough when both are set.

How are DST transitions handled?

Runs are computed against the local wall clock of your selected zone. During spring-forward a 02:30 job simply doesn't fire; during fall-back it fires once even though the hour repeats in real time.

Can I see runs in my own time zone?

Yes. Every scheduled run is listed both in the selected zone and in your browser's local time, with date, weekday and 24-hour clock.

Is anything uploaded?

No. Parsing, describing and scheduling all run in your browser. The expression never leaves the page.

Related tools