— Developer Tools

Free Cron Expression Tester

Type a cron schedule to read it in plain English and see its next five runs, in UTC or your own time zone.

— Samples

Minute

Hour

Day

Month

Weekday

Valid
Live

What is a Cron Expression Tester?

A cron expression is five fields, minute, hour, day of month, month and day of week, that tell a scheduler when to run a job. This tester reads an expression in plain English and lists the next five times it will fire.

Run times come from cron-parser, which follows Vixie cron, the version behind most Linux crontabs, and also understands seconds, L, # and @ shortcuts. The plain-English reading comes from cronstrue. Times can be shown in UTC, as most servers and CI systems run, or in your own time zone.

Key Features

The Next Five Runs, Not Just a Description

A list of real dates and times shows mistakes a description hides, such as a job that runs on Fridays as well as the 13th.

UTC or Your Own Time Zone

Switch between UTC, which servers and CI runners usually use, and your browser’s zone, including daylight saving changes.

Extended Syntax Understood

A leading seconds field, L for the last day, # for the nth weekday, names like MON and JAN, and @daily-style shortcuts all work.

Errors Point at the Field

A value out of range, the wrong number of fields or a date that never exists is reported specifically, with the allowed range.

Runs in Your Browser

Expressions are parsed locally, so job names and schedules from private systems aren’t uploaded.

Perfect for everyone

  • Developers writing crontabs
  • DevOps engineers scheduling Kubernetes CronJobs and CI workflows
  • Anyone checking when a scheduled job will really run

How to Use the Cron Expression Tester

Type the expression, pick a time zone, and check the next runs.

1

Type or Paste the Expression

Enter five fields separated by spaces, or six with seconds first, or a shortcut such as @daily. The reading and runs update as you type.

2

Choose UTC or Your Time Zone

Use UTC for servers, containers and CI systems, which usually run in UTC. Use your time zone for a crontab on your own machine.

3

Read the Plain-English Line

Check that the sentence matches what you meant, such as Monday through Friday rather than every day.

4

Check the Next Five Runs

The list shows real dates and times. If the first run is further away than you expected, look again at the day fields.

Worked Examples

Cron Expressions and Their Next Runs

Every answer is the tester’s output in UTC mode, computed from Sunday 25 October 2026 at 00:00 UTC. Read the expression and guess the first run before revealing it.

REF_001Working hours

“*/15 9-17 * * 1-5”

REF_002Weekday mornings

“0 9 * * 1-5”

REF_003Day and weekday both set

“0 0 13 * 5”

REF_004Last day of the month

“0 0 L * *”

REF_005Third Friday

“0 0 * * 5#3”

REF_006Shortcut

“@daily”

REF_007Seconds field

“30 0 9 * * MON”

REF_008Every six hours

“0 */6 * * *”

REF_009Minute out of range

“60 * * * *”

REF_010Four fields

“* * * *”

Syntax

Cron Fields and Operators

Five fields, read left to right, and four operators cover nearly every schedule. These are the rules the tester applies.

01 / MINUTE

Minute, 0 to 59

The first field is the minute within the hour. 0 means on the hour and 30 means half past.

“Which minute does 0 9 * * * run at?”

02 / HOUR

Hour, 0 to 23

The second field uses a 24-hour clock, so 13 is 1 p.m. and 0 is midnight.

“What time is hour 18?”

03 / DAY

Day of Month, 1 to 31

The third field picks dates. A day that doesn’t exist in a month, such as the 31st in April, is simply skipped that month.

“Does 0 0 31 * * run in April?”

04 / MONTH

Month, 1 to 12 or JAN to DEC

The fourth field picks months by number or by three-letter name. 1-3 is the first quarter.

“Which months does 1-3 cover?”

05 / DAY

Day of Week, 0 to 7 or SUN to SAT

The fifth field picks weekdays, where both 0 and 7 mean Sunday. 1-5 is Monday to Friday.

“Which day is 7?”

06 / STAR

Star, Comma and Dash

A star means every value, a comma lists values, and a dash gives a range. 1,15 is the 1st and 15th, and 9-17 is nine to five.

“What does 1,15 mean in the day field?”

07 / SLASH

Slash for Steps

A slash steps through a range: a star with /15 in the minute field runs every 15 minutes. Steps restart at each hour or day.

“Does */25 in the minute field run evenly every 25 minutes?”

08 / DAY

Day of Month OR Day of Week

When both day fields are restricted, a day matching either one runs. 0 0 13 * 5 runs on every Friday and on every 13th.

“Is 0 0 13 * 5 only Friday the 13th?”

09 / L

L and the Hash Mark

L in the day field means the last day of the month, and 5#3 in the weekday field means the third Friday. They’re extensions, not standard crontab.

“Which writes the second Monday?”

10 / SHORTCUTS

Shortcuts and Seconds

@hourly, @daily, @weekly, @monthly and @yearly replace common expressions. Some schedulers add a seconds field at the front, making six fields.

“What is @weekly as five fields?”

Recipes

Cron Expressions for Common Schedules

Copy one of these as a starting point, then paste it above to check the next runs in your time zone.

01 / EVERY

Every Five Minutes

A step in the minute field fires at :00, :05, :10 and so on. It suits health checks and queue polling.

“How do you run a job every five minutes?”

02 / EVERY

Every Hour, on the Hour

A zero minute with stars elsewhere runs at the top of every hour. Shift the minute to spread load, such as 17 for quarter past.

“How do you run a job hourly?”

03 / EVERY

Every Night at 2:30

A fixed minute and hour run once a day. Nightly backups and cleanups usually live in the small hours.

“How do you run a job at 02:30 every day?”

04 / WEEKDAYS

Weekdays at Nine

A weekday range in the last field skips Saturday and Sunday. Reports and reminders often use this.

“How do you run a job at 09:00 Monday to Friday?”

05 / EVERY

Every Sunday at Midnight

A single weekday value runs once a week. Both 0 and 7 mean Sunday.

“How do you run a job weekly on Sunday at midnight?”

06 / FIRST

First Day of Every Month

Day 1 in the third field runs at the start of each month. Invoices and monthly rollups commonly start here.

“How do you run a job at 06:00 on the first of each month?”

07 / TWICE

Twice a Day

A comma in the hour field lists both times. This runs at 08:00 and 20:00.

“How do you run a job at 08:00 and 20:00?”

08 / EVERY

Every 15 Minutes During Business Hours

Combine a minute step with hour and weekday ranges. The last run of the day is 17:45.

“How do you poll every quarter hour from 9 to 5 on weekdays?”

09 / QUARTERLY

Quarterly

List the first month of each quarter in the month field. This runs on 1 January, April, July and October.

“How do you run a job at the start of each quarter?”

10 / LAST

Last Friday of the Month

Standard crontab can’t say this, but schedulers that support L accept 5L in the weekday field. Otherwise, run every Friday and check the date in the script.

“What do L-aware schedulers accept for the last Friday?”

Cron Dialects You’ll Meet

Schedulers share the five-field idea but differ in the details. Check which one runs your job.

Linux crontab

Vixie cron and cronie read five fields in the server’s local time zone, with the OR rule for the two day fields. Shortcuts such as @reboot also work there.

Kubernetes CronJob

Uses standard five-field syntax and, since version 1.27, a timeZone field. Without it, schedules follow the controller manager’s time zone.

GitHub Actions

The schedule trigger takes five fields in UTC, and the shortest interval is every five minutes. Busy periods can delay scheduled runs.

AWS EventBridge

Uses six fields, minutes through year, and requires a question mark in either day-of-month or day-of-week. Expressions copied from crontab need converting.

Quartz and Spring

Java schedulers put seconds first and use a question mark for the unused day field. The tester reads the seconds field but not the question mark.

systemd Timers

systemd uses its own OnCalendar format, such as Mon..Fri *-*-* 09:00:00, not cron fields. Use the systemd OnCalendar previewer for those.

Cron Mistakes to Avoid

Most cron surprises come from time zones, the two day fields, and how steps restart.

Tip 01

Forgetting the Server Runs in UTC

A job written for 9 a.m. runs at 9 a.m. UTC on most servers, which may be the middle of the night for you. Check both zones here.

Tip 02

Setting Both Day Fields

Restricting both day-of-month and day-of-week runs on days matching either, not both. Leave one as a star unless you mean OR.

Tip 03

Expecting Steps to Run Evenly

*/25 in the minute field runs at 0, 25 and 50, then again at 0, so the gaps are 25, 25 and 10 minutes.

Tip 04

Daylight Saving Gaps

A 2:30 a.m. job may not run on the night clocks go forward, or run twice when they go back. Schedule outside 1 a.m. to 3 a.m. local time, or use UTC.

Tip 05

Every Minute by Accident

A star in the minute field runs the job 60 times an hour. For hourly, put 0 in the minute field.

Tip 06

Day 31 in Short Months

0 0 31 * * skips every month without a 31st. Use L for the last day where your scheduler supports it.

Tip 07

Copying Between Dialects

A Quartz or EventBridge expression has extra fields and question marks that crontab rejects. Convert it field by field.

Tip 08

Overlapping Runs

Cron starts the next run even if the last one hasn’t finished. Use a lock such as flock, or Kubernetes’ concurrencyPolicy, for long jobs.

Time Zones and Cron

Cron fields say nothing about time zones, so the scheduler’s own clock decides when a job fires.

Tip 01

Crontab Uses the Server’s Zone

A Linux crontab runs in the system time zone unless the file sets CRON_TZ, which cronie supports. Check timedatectl on the server.

Tip 02

Containers Usually Run in UTC

Docker images rarely set a time zone, so cron inside a container fires in UTC. Set TZ in the image if a job must follow local time.

Tip 03

Kubernetes Has a timeZone Field

CronJob’s spec.timeZone takes an IANA name such as Europe/Berlin. Without it, the schedule follows the controller manager’s zone.

Tip 04

CI Schedules Are UTC

GitHub Actions and most hosted CI systems read cron in UTC with no zone option. Convert your local time before writing the expression.

Tip 05

UTC Avoids Daylight Saving Surprises

In UTC, every day has exactly 24 hours, so jobs never skip or double. Convert to local time only when a human-facing deadline needs it.

Tip 06

Watch the Offset Change

A job at 14:00 UTC is 10:00 in New York in summer and 09:00 in winter. The My time zone view shows the shift on the dates it happens.

When to Test a Cron Schedule

Before a schedule goes live, and whenever a job runs at the wrong time.

Writing a Crontab Entry

Check the next runs before saving with crontab -e, so a backup or cleanup job fires when you expect.

Scheduling a Kubernetes CronJob

Confirm the schedule in UTC, the usual cluster zone, and compare it with your local working hours.

Setting Up a CI Workflow

Test a GitHub Actions schedule so nightly builds run after the day’s merges, not in the middle of them.

Explaining an Inherited Schedule

Paste an expression from an old server and read it in plain English before changing anything.

Debugging a Missed Run

Compare the listed runs with your logs to see whether the schedule or the job itself was wrong.

Planning Maintenance Windows

Make sure batch jobs avoid business hours, backups and deploy windows in every time zone you serve.

Learning Cron Syntax

Change one field at a time and watch both the description and the run list respond.

Frequently Asked Questions