CalcHub

Cron Expression Parser — Translate Cron to English

Paste a 5-field cron expression and get a plain-English schedule plus the next 5 run times — with a warning when the day-of-month/day-of-week OR-rule will surprise you.

Last reviewed 2026-10-19. Rates change — verify against the official sources linked below before relying on these figures.

What this is based on

  • Standard 5-field cron: minute hour day-of-month month day-of-week. Supports *, lists (1,2,3), ranges (1-5) and steps (*/15, 9-17/2).
  • Names (MON, JAN) and macros (@daily, @hourly) are not supported — convert them to numbers first.
  • When BOTH day-of-month and day-of-week are restricted, cron treats them as OR — one of the most common scheduling bugs.
  • Next-run times are computed in your browser's local timezone; production crons typically run in server time (usually UTC).

The OR-rule that schedules jobs wrong

Setting both day-of-month and day-of-week is the classic cron trap: '0 9 1 * 5' does NOT mean '9am on the 1st if it's a Friday' — it means '9am on the 1st AND on every Friday'. Cron ORs the two fields when both are restricted. If you meant AND, run daily and check the condition inside the job.

Reading a cron line without counting fields

Minute, hour, day-of-month, month, day-of-week — five fields, left to right. Most mistakes come from miscounting: '30 9' is 9:30, not 30:09 (which doesn't exist). The other classic: 0-6 vs 0-7 for day-of-week — both 0 and 7 mean Sunday, so '1-5' is your Mon–Fri range.

Step syntax: '*/15' means every 15 from the range start, '9-17/2' means 9, 11, 13, 15, 17. Try pasting '*/15 9-17 * * *' above and read the next runs — five seconds of experimenting builds more intuition than any table.

Timezones — the invisible bug

A cron fires in the timezone of whatever runs it. Your laptop's crontab uses local time; most servers default to UTC; CI systems have their own settings. '9:00 Monday' in UTC is 4am Eastern — the tool shows your local interpretation, so always check what timezone the actual scheduler uses.

Frequently asked questions

What does '0 9 * * 1-5' mean?
9:00 AM, Monday through Friday — weekday-only schedules use the 5th field with ranges like 1-5.
Why did my job run on BOTH the 1st and Fridays?
Because cron ORs day-of-month and day-of-week when both are set. '0 9 1 * 5' = on the 1st of the month AND every Friday. For AND semantics, schedule daily and gate inside the script.
How do I run something every 15 minutes?
*/15 in the minute field: '*/15 * * * *'. For every 15 minutes only in working hours: '*/15 9-17 * * *'.
Does cron support seconds?
Standard cron doesn't — the 6-field variants (Quartz, systemd timers, some schedulers) add a leading seconds field. This parser covers the classic 5-field format.

Related calculators