Build and understand cron expressions, with a live next-runs preview
5 fields (minute hour day month weekday) for standard cron, or 6 (seconds first) for Quartz — detected automatically from how many fields you type.
At 09:00, only on Monday, Tuesday, Wednesday, Thursday, Friday
Next 10 runs
Type or pick a preset
Type your own expression, or click a common preset to start from.
Read the description and next runs
See a plain-English description and the next 10 times it fires, updated live.
Copy it
One click copies the expression into your clipboard.
Type or build a cron expression and see exactly what it means: a plain-English description and the next 10 times it will actually run, computed live as you type.
Works with both standard 5-field cron (minute hour day month weekday, the format crontab -e, GitHub Actions, and most CI/CD tools use) and 6-field Quartz syntax (second minute hour day month weekday, the format Java's Quartz scheduler and Azure Functions/WebJobs use) — detected automatically from how many fields you type. One-click presets cover the schedules people actually need most (every N minutes, daily, weekdays, weekly, monthly, yearly), and a syntax reference explains every special character (* , - / and Quartz's ?).
Everything runs in your browser — nothing you type is sent anywhere.
It means "every" — any value is allowed in that field. * in the minute field means every minute; * in every field (* * * * *) means every minute of every hour of every day.
Standard (Unix) cron has 5 fields — minute, hour, day-of-month, month, day-of-week — and can only schedule down to the minute. Quartz (used by Java's Quartz scheduler and Azure Functions/WebJobs) adds a seconds field at the very start, making it 6 fields, and can schedule down to the second. This tool detects which one you mean automatically, from how many fields you type.
It's a Quartz-only wildcard meaning "no specific value," used in the day-of-month or day-of-week field specifically when the other one is already set to a real value — e.g. Quartz's own documented way to write "every weekday at 9am" is `0 0 9 ? * MON-FRI` (seconds, minutes, hours, then ? in day-of-month since day-of-week is doing the real work). Standard 5-field cron doesn't have or need `?` — use `*` there instead.
Just one — a real, standard cron rule that trips people up: when both fields are restricted (not *), a day matches if EITHER matches, not both. "0 0 1,15 * MON" fires on the 1st, the 15th, AND every Monday, not only on a Monday that happens to also be the 1st or 15th.
Yes — put the day number in the day-of-month field, e.g. 0 9 15 * * for 9am on the 15th of every month. If a month has fewer days than the one you picked (like the 31st in February), that month is simply skipped.
Use a step: */15 * * * * runs every 15 minutes, 0 */2 * * * runs every 2 hours on the hour. The presets above include the most common ones.
Sunday — cron's day-of-week is 0-indexed starting from Sunday (0=Sun, 1=Mon, ... 6=Sat). Some systems also accept 7 for Sunday as an alias; this tool treats 0 and 7 identically.
Yes — MON-SUN for day-of-week and JAN-DEC for month are accepted anywhere a number would be, including in ranges and lists (e.g. MON-FRI, JAN,JUL).
Either the expression describes a date that can never actually occur (like day-of-month 30 combined with month February, which never has a 30th), or the next match is more than 8 years away — this tool searches up to 8 years ahead before giving up, which comfortably covers every realistic schedule.
Not supported — a 7-field expression (Quartz's optional year field) is rejected with a clear message rather than silently ignored. This is a genuinely rare, advanced case; if you need it, most schedulers treat a missing year field as "every year" anyway, which is what a 5- or 6-field expression already means here.
Yes — GitHub Actions' cron (on.schedule) uses the same standard 5-field format this tool supports by default.
No — parsing, the description, and the next-runs calculation all happen entirely in your browser.
A real, common mix-up: "5 * * * *" means "at minute 5 of every hour" (once an hour), not every 5 minutes — because a plain number in a field means exactly that value, not a repeating interval. The step character is what means "every N": "*/5 * * * *" is the one that actually runs every 5 minutes (the every-5-minutes preset above sets this correctly for you).
Yes — a Kubernetes CronJob's schedule field uses the same standard 5-field cron syntax this tool supports by default.
Partially, with an honest caveat: AWS uses its own cron dialect with real quirks this tool doesn't specifically validate against — it requires a ? in either the day-of-month or day-of-week field (never both as *, unlike standard cron) and doesn't support the OR-matching behavior standard cron and Quartz both use when both fields are restricted. Treat an AWS-targeted expression built here as a starting point to double-check against AWS's own documentation, not a guaranteed-valid AWS expression.
Convert between length, weight, and temperature units instantly. Free, works entirely in your browser.
Convert Unix epoch timestamps to human-readable dates and back. Live current-timestamp ticker, auto-detects seconds vs milliseconds, outputs ISO 8601, UTC, local time, and relative ("2 hours ago") formats. Perfect for debugging logs, APIs, and databases.