ClockOrbit

Advanced (L / W / #)

*/30 9-17 * * 1-5

Every 30 minutes from 09:00 to 17:00, Monday to Friday.

This preview is live: the table below shows the actual next run times for */30 9-17 * * 1-5 in your time zone, recomputed in your browser. Change the expression, dialect, or zone to experiment, then copy the result.

Next runs
valid
Upcoming runs
Fri, Nov 6 2026
13:30 UTC
in 15 minutes
Fri, Nov 6 2026
14:00 UTC
in 45 minutes
Fri, Nov 6 2026
14:30 UTC
in 1 hours
Fri, Nov 6 2026
15:00 UTC
in 2 hours
Fri, Nov 6 2026
15:30 UTC
in 2 hours
Fri, Nov 6 2026
16:00 UTC
in 3 hours
Fri, Nov 6 2026
16:30 UTC
in 3 hours
Fri, Nov 6 2026
17:00 UTC
in 4 hours
Fri, Nov 6 2026
17:30 UTC
in 4 hours
Sun, Nov 8 2026
09:00 UTC
in 44 hours
Sun, Nov 8 2026
09:30 UTC
in 44 hours
Sun, Nov 8 2026
10:00 UTC
in 45 hours
Sun, Nov 8 2026
10:30 UTC
in 45 hours
Sun, Nov 8 2026
11:00 UTC
in 46 hours
Sun, Nov 8 2026
11:30 UTC
in 46 hours
Sun, Nov 8 2026
12:00 UTC
in 47 hours
Sun, Nov 8 2026
12:30 UTC
in 47 hours
Sun, Nov 8 2026
13:00 UTC
in 2 days
Sun, Nov 8 2026
13:30 UTC
in 2 days
Sun, Nov 8 2026
14:00 UTC
in 2 days
Sun, Nov 8 2026
14:30 UTC
in 2 days
Sun, Nov 8 2026
15:00 UTC
in 2 days
Sun, Nov 8 2026
15:30 UTC
in 2 days
Sun, Nov 8 2026
16:00 UTC
in 2 days
Sun, Nov 8 2026
16:30 UTC
in 2 days

What */30 9-17 * * 1-5 means

*/30 9-17 * * 1-5 stacks three constraints at once: a 30-minute step in the minute field, a 9-17 hour range, and a 1-5 weekday range. The result fires on the hour and half-hour, but only between 9am and 5pm, and only on working days, roughly 18 runs a day, five days a week.

This is the workhorse pattern for human-facing polling: checking a queue, refreshing a dashboard, or syncing a partner system that is itself only active during business hours. It deliberately goes quiet overnight and at weekends to save resources and avoid useless runs.

Field-by-field breakdown

Unix cron has five fields. Here is what each one is doing in this expression:

FieldValueMeaning
Minute*/30every 30 (step) across minute
Hour9-17the range 9-17 (inclusive) of hour
Day of month*every day-of-month
Month*every month
Day of week1-5the range 1-5 (inclusive) of day-of-week

Every 30 min during business hours, weekdays in every scheduler

The same cadence written for the seven cron dialects you are most likely to meet. Copy the line for the system you target, the field count and day-of-week numbering differ between them.

SchedulerExpressionCopy
Unix / crontab*/30 9-17 * * 1-5
GitHub Actions*/30 9-17 * * 1-5
Kubernetes CronJob*/30 9-17 * * 1-5
Vercel Cron*/30 9-17 * * 1-5
Quartz0 */30 9-17 ? * 1-5 *
Spring0 */30 9-17 ? * 1-5
AWS EventBridge*/30 9-17 ? * 1-5 *

Dialect note: Three stacked constraints survive translation, but Kubernetes will interpret the hours in UTC unless you add CRON_TZ=, silently shifting your "business hours".

When you would use */30 9-17 * * 1-5

The gotcha worth knowing

The 9-17 range fires through 17:00, then */30 gives a final run at 17:30 only if you wrote 9-17 (it does NOT, 17:30 needs hour 17, which is included, so 17:00 and 17:30 both fire). To stop exactly at 17:00 use 9-16 plus a separate 0 17 * * 1-5.

People also search for

cron every 30 minutes business hourscron working hours every half hourcrontab 9-5 weekdays every 30 mincron office hours polling

*/30 9-17 * * 1-5 FAQ

What does the cron expression */30 9-17 * * 1-5 mean?

*/30 9-17 * * 1-5 means: Every 30 minutes from 09:00 to 17:00, Monday to Friday. */30 9-17 * * 1-5 stacks three constraints at once: a 30-minute step in the minute field, a 9-17 hour range, and a 1-5 weekday range. The result fires on the hour and half-hour, but only between 9am and 5pm, and only on working days, roughly 18 runs a day, five days a week.

How do I write "every 30 min during business hours, weekdays" in GitHub Actions?

Use */30 9-17 * * 1-5 in the schedule's cron field. The 9-17 range fires through 17:00, then */30 gives a final run at 17:30 only if you wrote 9-17 (it does NOT, 17:30 needs hour 17, which is included, so 17:00 and 17:30 both fire). To stop exactly at 17:00 use 9-16 plus a separate 0 17 * * 1-5.

How do I write "every 30 min during business hours, weekdays" for AWS EventBridge?

EventBridge uses six fields with a required year and a ? placeholder in one day field: */30 9-17 ? * 1-5 *. Wrap it as cron(*/30 9-17 ? * 1-5 *) in the console or CloudFormation.

What is the Quartz equivalent of */30 9-17 * * 1-5?

Quartz is seconds-first with a trailing year, so the equivalent is 0 */30 9-17 ? * 1-5 *. Remember Quartz numbers Sunday as 1, the opposite of Unix.

Related cron patterns

More cron tools

Browse the full set of cron pattern pages, or jump to the interactive tools: the cron expression builder for designing a schedule from scratch, the cron cheat sheet for a side-by-side reference, the cron timezone translator for moving a schedule between zones and dialects, and the GitHub Actions cron picker for DST-stable CI schedules.