Cron Explainer live
Give it a 5-field cron expression, get back a plain-English description and the next run times in any timezone. Pure and offline — it explains schedules, it doesn't run them.
// response appears here
| expr* | text | cron expression (minute hour day-of-month month day-of-week) | */15 9-17 * * 1-5 |
| tz | text | IANA timezone for the run times (optional, defaults to UTC) | Europe/Berlin |
| n | text | how many upcoming run times to return (optional, 1-20) | 5 |
curl 'https://cron.benjamin-dreier.de/v1/explain?expr=%2A%2F15+9-17+%2A+%2A+1-5&n=5&tz=Europe%2FBerlin'
{
"expression": "*/15 9-17 * * 1-5",
"description": "Every 15 minutes, from 09:00 to 17:59, on Monday through Friday",
"fields": {
"minute": "*/15", "hour": "9-17",
"day_of_month": "*", "month": "*", "day_of_week": "1-5"
},
"timezone": "Europe/Berlin",
"next_runs": [
"2026-07-07T09:00:00+02:00",
"2026-07-07T09:15:00+02:00"
]
}
OpenAPI spec → — drop it into your own client or codegen.
The Cron Explainer reads a standard 5-field cron expression and hands back a plain-English sentence plus the next real run times in the timezone you care about. No more decoding */15 9-17 * * 1-5 in your head or second-guessing whether a job fires at 09:00 or 09:15.
It's useful anywhere cron syntax turns up: crontab lines, CI/CD schedules, Kubernetes CronJob specs, or backup jobs you set up once and never want to misread again. Because it also computes the upcoming runs in any IANA timezone, it's the fastest way to sanity-check a schedule before you ship it. It explains and previews schedules — it never executes anything.
| minute | 0-59 |
| hour | 0-23 |
| day of month | 1-31 |
| month | 1-12 or JAN-DEC |
| day of week | 0-6 (Sun-Sat) or SUN-SAT |
| * , - */n | any value · list · range · every n |
| * * * * * | every minute |
| */15 * * * * | every 15 minutes |
| 0 9 * * 1-5 | at 09:00, Monday through Friday |
| 0 0 * * * | every day at midnight |
| 30 3 1 * * | 03:30 on the 1st of every month |
| 0 */6 * * * | every 6 hours, on the hour |