A cron expression is five space-separated fields โ minute, hour, day-of-month, month and day-of-week โ that tell a scheduler exactly when to run a job. The tool above parses your expression, validates each field on its own, translates it into a plain-English sentence, and previews the next five run times in UTC. Everything happens in your browser; nothing you type is uploaded.
What is cron?
Cron is the time-based job scheduler built into Unix-like systems. You give it a schedule and a command, and it runs that command automatically whenever the current time matches the schedule. The schedule itself is written as a compact string called a cron expression, most commonly stored in a crontab file. Cron powers backups, log rotation, report generation, cache warming, and countless other recurring tasks.
The five fields, in order
A standard cron expression has exactly five fields, always in this order:
| Field | Allowed values | Meaning |
|---|---|---|
| minute | 0-59 | Minute of the hour |
| hour | 0-23 | Hour of the day (24-hour clock) |
| day-of-month | 1-31 | Day of the month |
| month | 1-12 | Month of the year |
| day-of-week | 0-6 | Weekday, where 0 is Sunday |
So 0 9 * * 1-5 reads field by field as: minute 0, hour 9, any day-of-month, any month, day-of-week Monday through Friday โ in other words, at 09:00 on weekdays.
The special characters
- Asterisk
*โ every value the field allows. In the minute field it means every minute; in the month field, every month. - Step
*/nโ every nth value.*/15in the minute field means minute 0, 15, 30 and 45. A step can also follow a range, as in0-30/10. - Range
a-bโ an inclusive span.1-5in day-of-week means Monday through Friday. - List
a,b,cโ several specific values.0,30in the minute field means on the hour and on the half hour.
These combine freely. 0,15,30,45 9-17 * * 1-5 means every 15 minutes between 9am and 5pm on weekdays.
A worked example
Take 30 2 1 * *. Minute 30, hour 2, day-of-month 1, any month, any day-of-week. That is “at 02:30 on the 1st of every month” โ a classic monthly maintenance window. Change the day-of-month to */2 and it becomes every second day at 02:30. The builder above shows this translation and the concrete next dates so you can confirm the schedule before you trust it.
The day-of-month / day-of-week gotcha
This trips up almost everyone. When you restrict both the day-of-month and the day-of-week fields (neither is *), classic cron does not require both to match โ it fires when either matches. So 0 0 13 * 5 does not mean “midnight on Friday the 13th”; it means “midnight on the 13th of any month, and also midnight on every Friday”. If you need a true AND, restrict only one field and filter the other inside your script. Whenever both day fields are set, the tool above adds an explicit note reminding you of this OR behaviour.
Common use cases and errors
- Every 15 minutes:
*/15 * * * *โ a frequent health-check or polling cadence. - Daily at midnight:
0 0 * * *โ nightly jobs and rollovers. - Weekdays at 9am:
0 9 * * 1-5โ business-hours reports. - Out-of-range values: an hour of 24 or a month of 0 is invalid; hours stop at 23 and months start at 1.
- Too many fields: some systems add a leading seconds field or a trailing command. The classic format is exactly five time fields โ anything else is rejected here.
A note on timezones
The run-time preview is calculated in UTC so the result is unambiguous no matter where you are. Real cron daemons, however, evaluate schedules in the server’s local timezone, which may observe daylight saving. Before you rely on a schedule, convert the UTC preview to your server zone and remember that jobs pinned to a clock time can run twice or be skipped on the days the clocks change.
Runs entirely in your browser
This builder never sends your expression anywhere. The parser, the English translator and the next-run scanner are all plain JavaScript executing on your device, so you can test schedules โ including ones that reference internal job names in a command you keep elsewhere โ without any data leaving your machine.