Cron Expression Parser — Free Online Tool

Parse cron expressions: schedule explanation, next run times, validator. Generate cron: every hour, daily, weekly, monthly. Crontab syntax reference.

Use this free online Cron Expression Parser directly in your browser. No signup required, no data leaves your device. Part of Utilier — a collection of 133+ developer utilities.

What is Cron Expression Parser & Generator (Schedule, Next Run, Validator)?

Cron expression parser decodes cron syntax (scheduled task format used in Unix/Linux cron, Kubernetes CronJobs, CI/CD pipelines) into human-readable schedules. Parses: 5-field (* * * * *: minute, hour, day, month, weekday) and 6-field (second support). Explains: '0 9 * * 1' = 'Every Monday at 9:00 AM', '*/15 * * * *' = 'Every 15 minutes'. Features: next run calculator (shows next 10 execution times), validator (syntax errors: invalid range, out-of-bounds values), generator (create cron from description: 'every hour' → '0 * * * *'), common patterns library (every day, every week, last day of month). Reverse: generates cron from schedule (select frequency, time → cron expression).

  • Cron syntax (5-field): Format: minute(0-59) hour(0-23) day(1-31) month(1-12) weekday(0-6, Sun=0). Example: 30 14 * * * = 2:30 PM every day. * = every, */n = every n units, n-m = range, n,m = list.
  • Special characters: * (any): every value. */15: every 15 (minutes, hours). 1-5: range (Mon-Fri). 1,15: list (1st, 15th). ? (any, day/weekday): used when other specified. L (last): last day of month. # (nth): 3rd Monday (1#3).
  • Human explanation: 0 9 * * 1 → 'At 9:00 AM, only on Monday'. */30 * * * * → 'Every 30 minutes'. 0 0 1 * * → 'At midnight, on day 1 of the month'. Instant understanding (no manual decoding).
  • Next run calculator: Shows next 10 execution times with dates/times. Example: cron 0 9 * * 1 → next runs: Mon Jan 22 9:00 AM, Mon Jan 29 9:00 AM, Mon Feb 5 9:00 AM... Verify schedule before deploying.
  • Cron generator: Select: frequency (every minute, hourly, daily, weekly, monthly), time (9:00 AM), day (Monday, 1st of month). Generates cron: 0 9 * * 1 (Mon 9 AM). No manual syntax (point-and-click).

Why use cron parser?

Cron syntax cryptic (0 9 * * 1 = ?) → parser explains in plain English. Generator = create cron without memorizing syntax.

  • Understand existing cron jobs: Legacy cron: 30 2 * * 0 (what does this run?). Parser: 'At 2:30 AM, only on Sunday'. Audit scheduled tasks (backups, cleanups, reports). No guessing.
  • Verify schedule before deployment: Cron 0 0 * * 1-5 intended: weekdays. Next runs show: Mon-Fri (correct). If shows weekends: syntax error. Catch mistakes before prod (wrong backup time = data loss).
  • Debug scheduling issues: Job not running when expected? Parse cron: 0 9 * * 1-5 = weekdays. Today = Saturday (job doesn't run, expected). Or cron 0 9 31 * * = only months with 31 days (Feb skipped).
  • Generate complex schedules: Need: 'Every 15 minutes between 9 AM - 5 PM on weekdays'. Manual syntax hard. Generator: select times → */15 9-17 * * 1-5. Instant, accurate.
  • Learn cron syntax: Try expression → see explanation. 0 */2 * * * → 'Every 2 hours'. Experiment: change values, see how explanation updates. Interactive learning (faster than docs).
  • CI/CD pipeline schedules: GitLab CI, GitHub Actions, Jenkins: use cron for scheduled pipelines. Example: nightly builds (0 0 * * *), weekly deployments (0 0 * * 0). Parse/generate for clarity.

When to use cron parser

Use whenever working with cron expressions or scheduled tasks.

  • Understanding existing cron jobs (parse: what schedule is this?).
  • Creating new cron jobs (generate: I need every Monday at 9 AM).
  • Validating cron syntax (check for errors before deploying).
  • Debugging scheduling issues (why didn't job run? Parse cron).
  • CI/CD pipeline schedules (GitLab CI, GitHub Actions, Jenkins).
  • Kubernetes CronJobs (validate cron expression in manifest).
  • Task schedulers (Airflow, crontab, systemd timers).
  • Learning cron syntax (interactive examples, explanations).

How to use cron parser

Enter cron expression, see explanation and next runs. Or generate cron from description.

  1. Parse existing cron: Enter expression: 0 9 * * 1 (5 fields: min, hour, day, month, weekday). Or 6-field: 0 0 9 * * 1 (with seconds). Click Parse → see explanation: 'At 9:00 AM, only on Monday'.
  2. View next run times: Shows next 10 executions with dates/times: Mon Jan 22 9:00 AM, Mon Jan 29 9:00 AM, Mon Feb 5 9:00 AM... Verify: runs when expected? Correct timezone shown.
  3. Validate syntax: Tool checks: valid ranges (minute 0-59, hour 0-23), correct separators (spaces), special chars (* / - , ? L #). Errors shown: 'Hour 25 out of range (0-23)'.
  4. Generate cron (alternative): Switch to Generator. Select: frequency (hourly, daily, weekly), time (9:00 AM), day (Monday, 1st). Tool generates: 0 9 * * 1. Copy cron expression.
  5. Use presets (common patterns): Click preset: 'Every hour' → 0 * * * *, 'Every day at midnight' → 0 0 * * *, 'Every weekday at 9 AM' → 0 9 * * 1-5. Customize if needed.
  6. Test edge cases: Check: Feb 30 (doesn't exist: job skips), month with 31 days (0 0 31 * * = Jan, Mar, May, Jul, Aug, Oct, Dec only). Next runs show skipped dates.
  7. Copy for use: Copy cron expression. Paste in: crontab file (crontab -e), Kubernetes CronJob YAML (schedule: "0 9 * * 1"), CI/CD config (.gitlab-ci.yml, GitHub Actions).

Key features

  • Human-readable explanation: Cron → English. 0 9 * * 1 → 'At 9:00 AM, only on Monday'. */15 * * * * → 'Every 15 minutes'. 0 0 1 * * → 'At midnight, on day 1 of the month'. Instant understanding.
  • Next run calculator: Shows next 10 execution times: dates + times in local timezone. Example: Mon Jan 22 2024 9:00 AM, Mon Jan 29 2024 9:00 AM... Verify schedule accuracy before deploying.
  • Syntax validator: Checks: 5-field or 6-field format, valid ranges (min 0-59, hour 0-23, day 1-31, month 1-12, weekday 0-6), special chars valid (* / - , ? L #). Shows errors with suggestions.
  • Cron generator (reverse): Select schedule → generates cron. Frequency: every minute, every N minutes, hourly, daily, weekly, monthly, yearly. Time picker: hour, minute. Day picker: Monday, 1st of month. No manual syntax.
  • Common presets library: One-click presets: 'Every minute' (* * * * *), 'Every hour' (0 * * * *), 'Every day at midnight' (0 0 * * *), 'Every weekday at 9 AM' (0 9 * * 1-5), 'Last day of month' (0 0 L * *).
  • Timezone support: Shows next runs in: local timezone (auto-detected), UTC, custom timezone. Cron runs in server timezone (important: UTC server → cron runs UTC time, not local).
  • 6-field support (seconds): Standard cron: 5 fields (minute onwards). Some systems: 6 fields (seconds + 5). Example: 30 0 9 * * * = 9:00:30 AM. Tool supports both (auto-detects).

Common use cases

  • Daily backup (midnight): Cron: 0 0 * * *. Explanation: 'At midnight (12:00 AM)'. Next runs: Jan 22 12:00 AM, Jan 23 12:00 AM... Use for: database backups, log rotation, cleanup tasks.
  • Nightly build (2 AM weekdays): Cron: 0 2 * * 1-5. Explanation: 'At 2:00 AM, Mon-Fri'. Next runs: Mon Jan 22 2:00 AM, Tue Jan 23 2:00 AM (skips weekends). CI/CD: nightly tests, builds.
  • Every 15 minutes (monitoring): Cron: */15 * * * *. Explanation: 'Every 15 minutes'. Next runs: 9:00, 9:15, 9:30, 9:45, 10:00... Use for: health checks, monitoring, data sync.
  • Weekly report (Monday 9 AM): Cron: 0 9 * * 1. Explanation: 'At 9:00 AM, only on Monday'. Next runs: Mon Jan 22 9:00 AM, Mon Jan 29 9:00 AM... Weekly summary emails, reports.
  • Monthly billing (1st of month): Cron: 0 0 1 * *. Explanation: 'At midnight, on day 1 of the month'. Next runs: Feb 1 12:00 AM, Mar 1 12:00 AM... Invoice generation, subscription renewals.
  • Last day of month (cleanup): Cron: 0 0 L * *. Explanation: 'At midnight, on the last day of the month'. Next runs: Jan 31 12:00 AM, Feb 28 12:00 AM (29 in leap year), Mar 31 12:00 AM... Month-end tasks.

Examples

Common cron expressions with explanations.

Every minute

* * * * *
Explanation: Every minute
Next runs: 9:00, 9:01, 9:02, 9:03...

All fields = *. Runs continuously. Use for: intensive monitoring, testing. Caution: high CPU usage.

Every hour (on the hour)

0 * * * *
Explanation: At minute 0 (every hour)
Next runs: 9:00, 10:00, 11:00...

Minute = 0, hour = * (every hour). Common: hourly tasks (log rotation, cache cleanup).

Every day at 2:30 AM

30 2 * * *
Explanation: At 2:30 AM
Next runs: Jan 22 2:30 AM, Jan 23 2:30 AM...

Fixed time (2:30 AM), every day. Use for: daily backups, reports, batch jobs.

Every weekday at 9 AM

0 9 * * 1-5
Explanation: At 9:00 AM, Monday through Friday
Next runs: Mon Jan 22 9:00 AM, Tue Jan 23 9:00 AM (skips Sat/Sun)

Weekday range 1-5 (Mon-Fri). Skips weekends. Use for: business hours tasks, notifications.

Every 15 minutes

*/15 * * * *
Explanation: Every 15 minutes
Next runs: 9:00, 9:15, 9:30, 9:45, 10:00...

Step value */15 in minute. Runs 4 times/hour. Use for: frequent polling, monitoring.

Technical reference

Cron expression syntax and field specifications:

5-field format
minute hour day month weekday. Minute: 0-59. Hour: 0-23. Day: 1-31. Month: 1-12 (or JAN-DEC). Weekday: 0-6 (Sun=0, or SUN-SAT). Example: 30 14 * * * = 2:30 PM every day.
6-field format (with seconds)
second minute hour day month weekday. Second: 0-59. Example: 30 0 9 * * * = 9:00:30 AM. Supported by: Quartz, Spring, some cloud schedulers. Standard cron: 5 fields (no seconds).
Special characters
* (any): matches all values. , (list): 1,15 = 1st and 15th. - (range): 1-5 = 1 through 5. / (step): */15 = every 15. ? (any, used in day/weekday): when other specified. L (last): last day/weekday. # (nth): 1#3 = 3rd Monday.
Asterisk (*)
Matches any value. Example: * in minute = every minute (0-59). * in weekday = every day (Sun-Sat). 0 * * * * = every hour (on the hour). * * * * * = every minute.
Step values (/)
*/n = every n units. */15 in minute = every 15 minutes (0, 15, 30, 45). */2 in hour = every 2 hours (0, 2, 4, 6...). Can use range: 0-30/5 = every 5 minutes from 0-30.
Ranges (-)
n-m = from n to m (inclusive). 1-5 in weekday = Mon-Fri. 9-17 in hour = 9 AM - 5 PM. 1-15 in day = first half of month. Example: 0 9-17 * * 1-5 = 9 AM - 5 PM, weekdays.
Lists (,)
n,m,o = specific values. 1,15 in day = 1st and 15th. 0,12 in hour = midnight and noon. MON,WED,FRI in weekday. Example: 0 9 1,15 * * = 9 AM on 1st and 15th of month.
Last day (L)
L in day = last day of month (28-31, varies). L in weekday = last occurrence (5L = last Friday). Example: 0 0 L * * = midnight on last day of month. 0 0 * * 5L = midnight on last Friday.
Nth weekday (#)
n#m = mth occurrence of weekday n. 1#3 = 3rd Monday (weekday 1, 3rd occurrence). 5#2 = 2nd Friday. Example: 0 9 * * 1#3 = 9 AM on 3rd Monday of month. Not all systems support.
Timezone handling
Cron runs in server timezone (usually UTC). Local time 9 AM in EST = UTC 2 PM (EST = UTC-5). Cron 0 14 * * * (UTC) = 9 AM EST. Check server timezone (date, timedatectl). Or use TZ= prefix (if supported).

Common mistakes to avoid

Using 7 for Sunday (should be 0 or 7, 0 preferred)

Why it happens: Weekday: 0-6 (Sun=0, Sat=6). Some systems accept 7=Sunday, but 0 standard. 0 9 * * 7 may fail on strict parsers. Confusing (0 and 7 both Sunday?).

How to avoid it: Use 0 for Sunday (standard). Or use names: SUN, MON, TUE... (clearer). Cron: 0 9 * * 0 or 0 9 * * SUN (Sunday 9 AM). Avoid 7.

Forgetting server timezone (cron runs UTC, not local time)

Why it happens: Cron runs in server timezone (usually UTC). Local 9 AM EST = 2 PM UTC. Cron 0 9 * * * (UTC) = 4 AM EST (UTC-5), not 9 AM EST. Job runs wrong time.

How to avoid it: Check server timezone: date, timedatectl. Convert local time to server timezone. Example: want 9 AM EST on UTC server → cron 0 14 * * * (9 AM + 5 hours = 2 PM UTC). Or use TZ= prefix (if supported).

Using day and weekday together (usually conflicts)

Why it happens: Day (1-31) and weekday (0-6) = OR logic (not AND). Cron 0 9 15 * 1 = 9 AM on 15th OR Monday (not 15th AND Monday). Runs more often than expected.

How to avoid it: Use day OR weekday, not both. If need 'specific weekday of month': use # (1#3 = 3rd Monday). Or leave other field as * (0 9 15 * * = 15th only, 0 9 * * 1 = Monday only).

Expecting 0 0 31 * * to run monthly (skips months without 31 days)

Why it happens: 0 0 31 * * = midnight on day 31. Feb (28/29 days), Apr/Jun/Sep/Nov (30 days) skipped. Runs 7 times/year (Jan, Mar, May, Jul, Aug, Oct, Dec), not 12.

How to avoid it: For monthly: use day 1-28 (guaranteed every month). Or use L (last day): 0 0 L * * (works all months). For 'every month': 0 0 1 * * (1st of month).

Not testing with next run calculator (schedule wrong)

Why it happens: Cron 0 9 * * 1-5 looks right (weekdays 9 AM). But next runs show: runs Mon-Fri (correct). Without testing: deploy → discover it runs weekends (syntax error: used 1-7 instead of 1-5, 7=Sunday).

How to avoid it: Use next run calculator before deploying. Verify: runs when expected, correct days/times, no skipped executions. Test edge cases (month boundaries, DST changes).

Frequently asked questions

What is the difference between 0 0 * * * and * * * * *?

0 0 * * * = At midnight (12:00 AM) every day. * * * * * = Every minute (all day, every day). First has minute=0, hour=0 (specific time). Second has all * (every value).

How do I run a cron job every 15 minutes?

*/15 * * * *. Step value */15 in minute field. Runs at: 0, 15, 30, 45 minutes past every hour. Example: 9:00, 9:15, 9:30, 9:45, 10:00, 10:15...

How do I run on the last day of the month?

0 0 L * *. L in day field = last day (28, 29, 30, or 31 depending on month). Example: Jan 31, Feb 28 (29 in leap year), Mar 31. Handles varying month lengths.

What does ? mean in cron?

? = any (used in day or weekday when the other is specified). Avoid conflict: 0 9 15 * ? = 9 AM on 15th (weekday = any). 0 9 ? * 1 = 9 AM on Monday (day = any). Not all systems support.

Can I use names instead of numbers (MON, JAN)?

Yes (most systems). Weekday: SUN, MON, TUE, WED, THU, FRI, SAT. Month: JAN, FEB, MAR... Example: 0 9 * * MON = Monday 9 AM. 0 0 1 JAN * = Jan 1 midnight. Case-insensitive.

Why doesn't my cron run every 30 seconds?

Standard cron = 5 fields (minute onwards, no seconds). */30 in minute = every 30 minutes, not seconds. For seconds: use 6-field cron (if supported): */30 * * * * * (every 30 seconds). Or script with sleep.

How do I run every 2 hours between 9 AM - 5 PM?

0 9-17/2 * * *. Range 9-17 (9 AM - 5 PM), step /2 (every 2 hours). Runs at: 9 AM, 11 AM, 1 PM, 3 PM, 5 PM. Combines range and step.

References

Privacy and availability

  • Runs entirely in your browser — zero server processing
  • No signup or account required
  • Works offline once loaded
  • Fast, lightweight, no external dependencies
  • Available as a browser extension for Chrome and Firefox