Dev Encyclopedia
ArticlesToolsContactAbout

Get notified when new content drops

No spam. Just new articles, tools, and updates straight to your inbox.

Dev Encyclopedia

A reference for builders

Dev.to
Discord
WhatsApp Channel
daily.dev
Hashnode
X

Content

  • Articles
  • Tools
  • About
  • Contact

Connect

  • support@devencyclopedia.com
  • RSS Feed

Legal

  • Privacy Policy
  • Terms of Service
  • Disclaimer

© 2026 Dev Encyclopedia

Back to top ↑
  1. Home
  2. /
  3. Tools
  4. /
  5. Cron Expression Builder
Free · Live · No account

Understand any cron expression instantly.

Type or build a cron expression, see the plain-English translation, and preview the next 5 scheduled run times in your timezone (free, no account, no ads).

Common schedules: paste into the tool

ExpressionPlain English
* * * * *Every minute
*/5 * * * *Every 5 minutes
0 * * * *Every hour (at :00)
0 0 * * *Daily at midnight UTC
0 9 * * *Daily at 9:00 AM UTC
0 9 * * 1-5Weekdays at 9:00 AM UTC
0 0 1 * *First day of every month
0 0 * * 0Every Sunday at midnight
Zeeshan Tofiq

Zeeshan Tofiq

Full Stack Developer

How the cron builder works

Everything runs in your browser as you type. There is no submit button and no server round trip, so the description and the run times update on every keystroke.

  1. 1

    Start from a preset or type your own expression

    The preset chips (every 5 minutes, weekdays at 9am, first of the month, and so on) fill both the expression box and the visual builder at once. If you already have a crontab line, paste just the schedule part into the expression box.

  2. 2

    The expression is split into 5 fields and validated

    The builder splits your input on whitespace and expects exactly 5 fields: minute, hour, day of month, month, day of week. Each field is then checked against its allowed range, so 0 70 * * * fails immediately with a range error instead of silently never running.

  3. 3

    Each field is expanded into the values it actually matches

    Steps, ranges, and lists are resolved into concrete numbers. A minute field of */15 expands to 0, 15, 30, 45. A day-of-week field of 1-5 expands to Monday through Friday. The five field cards under the input show the resolved meaning of each one.

  4. 4

    The five fields are translated into one plain-English sentence

    Time (minute plus hour) is described first, then the day constraint, then the month. This is the fastest way to catch a swapped field: if you meant 9am daily but the sentence says 'at minute 9 of every hour', the minute and hour fields are the wrong way round.

  5. 5

    The next 5 run times are calculated by walking forward in time

    Starting from the next whole minute, the builder steps forward one minute at a time and keeps the first 5 moments where all five fields match. It searches up to 4 years ahead, so impossible schedules such as 30 February simply return nothing.

  6. 6

    Copy the expression or the generated code

    The copy button puts the raw expression on your clipboard. The Code Usage block below shows the same schedule as a crontab entry and as a node-cron call, ready to paste into a script or a Node.js service.

What each part of the output means

The builder shows five separate pieces of output. Reading them in order (description, then fields, then run times) catches almost every scheduling mistake before it reaches a server.

Plain-English descriptionShown when the expression is valid

A single sentence describing when the job runs. Read it out loud and compare it to what you intended. Most cron bugs are a field in the wrong position, and the sentence exposes that instantly.

0 9 * * 1-5
→ at 9:00 AM, Monday through Friday

9 0 * * 1-5   (minute and hour swapped)
→ at 12:09 AM, Monday through Friday
Validation errorShown instead of the description

Appears when the expression does not have exactly 5 whitespace-separated fields, or when a field resolves to a value outside its allowed range. The error names the field so you know which one to fix.

0 9 * *
→ Expected 5 fields, got 4.
  Format: minute hour day month weekday

0 25 * * *
→ Hour value out of range (0-23): 25
The five field cardsPosition check

One card per field, in order, showing the raw value and a short summary of what it resolves to. Use these to confirm that each value landed in the field you meant. The card labels never move, so a value in the wrong card is obvious.

Minute   Hour   Day    Month   Weekday
  0       9      *      *       1-5
"min 0"  "9am"  "any"  "any"   "Mon-Fri"
Next 5 run timesIn your browser's local timezone

The five upcoming moments the schedule fires, with weekday, date, time, and timezone abbreviation. If this list is empty while the expression is valid, no date in the next 4 years satisfies every field at once, which usually means an impossible day and month combination.

1. Monday, 10 August 2026, 09:00 BST
2. Tuesday, 11 August 2026, 09:00 BST
3. Wednesday, 12 August 2026, 09:00 BST

# 0 0 30 2 *  → empty list (30 February)
Code usage blockReady to paste

The same schedule rendered two ways: a crontab line with a script path, and a node-cron call for a Node.js process. Swap the placeholder path or callback for your own and the schedule is already correct.

# crontab entry
0 9 * * 1-5  /path/to/script.sh

# Node.js with node-cron
cron.schedule('0 9 * * 1-5', () => { /* ... */ });

Cron field reference

FieldRangeSpecial values
Minute0–59*, */5, 0,30
Hour0–23*, */2, 9
Day of month1–31*, 1, 15
Month1–12*, 1-6, 12
Day of week0–7 (0 and 7 = Sun)*, 1-5, 0,6

Special syntax: * = any · */n = every n · a-b = range · a,b = list

Platform syntax differences

  • Linux crontab / Cloudflare Workers:Standard 5-field cron. This tool validates this format.
  • GitHub Actions:Same 5 fields but always runs in UTC. Minimum interval is every 5 minutes.
  • AWS EventBridge:Supports a 6-field format with an optional seconds field and year field. Also accepts "rate()" expressions.
  • Kubernetes CronJob:Standard 5-field cron. Runs in the pod's timezone, which defaults to UTC.

When to use the cron builder

Six situations that come up constantly, with the expression to start from and the one thing worth double-checking in each case.

SituationStart fromWhat to check
Nightly database backup0 3 * * *Confirm the server timezone. 3 AM UTC is the middle of the working day in parts of Asia.
GitHub Actions scheduled workflow*/15 * * * *GitHub Actions always runs in UTC and quietly ignores intervals shorter than 5 minutes.
A job that fired twice as often as expected0 0 1 * 1Restricting both day of month and day of week means OR, so this runs on the 1st and every Monday.
A job that never fires at allPaste the live crontab lineAn empty 'next 5 run times' list means the fields never intersect, for example day 31 in a 30-day month.
Weekly report every Monday morning0 8 * * 1Day of week 1 is Monday. Both 0 and 7 mean Sunday, which is the usual off-by-one trap.
Cloudflare Workers cron trigger0 */6 * * *Workers accept the standard 5 fields and always run in UTC, so build the schedule in UTC directly.

Frequently Asked Questions

What order are the 5 fields in a cron expression?
bash
# ┌───────── minute (0–59)
# │ ┌───────── hour (0–23)
# │ │ ┌───────── day of month (1–31)
# │ │ │ ┌───────── month (1–12)
# │ │ │ │ ┌───────── day of week (0–7, 0 and 7 = Sunday)
# │ │ │ │ │
  * * * * *
What does * mean in a cron expression?

* means every valid value for this field. In the minute field, * means every minute (0–59). In the hour field, * means every hour.

SymbolMeaningExample
*Every value* in minute = every minute
*/nEvery n values*/5 in minute = every 5 minutes
a-bRange1-5 in day-of-week = Monday to Friday
a,bList0,6 in day-of-week = Sunday and Saturday
How do I run a job every 5 minutes?
bash
*/5 * * * *   # every 5 minutes
*/15 * * * *  # every 15 minutes
*/30 * * * *  # every 30 minutes

The */ prefix means 'every N'. So */5 in the minute field runs at minutes 0, 5, 10, 15... up to 55.

ℹ Info

GitHub Actions: the minimum schedule interval is every 5 minutes. */5 * * * * is the smallest valid schedule. More frequent schedules are silently ignored.

How do I schedule a job for weekdays only?
bash
0 9 * * 1-5   # 9:00 AM, Mon–Fri
0 0 * * 1-5   # midnight, Mon–Fri
0 9 * * 0,6   # 9:00 AM on weekends only

Put 1-5 in the day-of-week field (the 5th field). Values: 0 = Sun, 1 = Mon, 2 = Tue, 3 = Wed, 4 = Thu, 5 = Fri, 6 = Sat. Both 0 and 7 represent Sunday.

What timezone does a cron job run in?
  • By default, cron runs in the system timezone of the server (usually UTC on most cloud hosts).
  • The Next 5 run times on this page show times in your local browser timezone for easy verification.
  • Always confirm your server's timezone before deploying a time-sensitive job.

⚠ Warning

GitHub Actions always runs in UTC regardless of your repository's timezone settings. If you need local time, calculate the UTC offset manually.

What happens when both day-of-month and day-of-week are set?

When both fields are restricted (neither is *), cron uses OR logic: the job runs if either condition is true.

bash
0 0 1 * 1   # midnight on the 1st of every month
            # OR every Monday (whichever comes first)

ℹ Info

AND logic (e.g. 'first Monday of the month') is not possible with standard cron. Use application-level scheduling or a cron library that supports named schedules.

Related reading

Tool

Cron to systemd Timer Converter

Turn the cron expression you just built into a systemd timer unit, with the OnCalendar syntax generated for you.

Guide

GitHub Actions Tutorial

Where the schedule trigger goes in a workflow file, and why scheduled runs there are always evaluated in UTC.

Guide

npm Scripts You're Probably Not Using

pre/post hooks and run-s let you sequence npm tasks like a scheduler (the npm equivalent of a cron pipeline).

Zeeshan Tofiq

Zeeshan Tofiq

Full Stack Developer

Full stack developer with over 6 years of experience building production applications. Writes practical guides on JavaScript, TypeScript, React, Node.js, and cloud infrastructure. Focused on helping developers solve real problems with clean, maintainable code.

Enjoyed this article?

Get practical dev guides, tool updates, and new articles delivered straight to your inbox. No spam, unsubscribe anytime.