Curated cron expression

15th Day of Every Month Cron Expression: 0 0 15 * *

Understand 0 0 15 * * for the middle of every month, with a field breakdown, next-run behavior, timezone guidance, billing use cases, and scheduler conversions.

Meaning at a glance

0 0 15 * *

Run at midnight on the 15th of each month

Once per month at the start of the fifteenth day.

Next-run example: After June 15 at 00:01, the next nominal run is July 15 at 00:00.

How 0 0 15 * * works

The 15 in day-of-month selects the fifteenth calendar date. With minute and hour at zero, the job begins at midnight in the scheduler timezone.

Unlike schedules on the 29th, 30th, or 31st, the fifteenth exists in every month. It is therefore a predictable anchor for mid-month reports and semi-monthly workflows.

Field breakdown for 0 0 15 * *
FieldValueMeaning
Minute0At minute zero
Hour0At midnight
Day of month15Fifteenth calendar day
Month*Every month
Day of week*Regardless of weekday

Good use cases

  • Mid-month payroll preparation
  • Billing reminder
  • Capacity snapshot
  • Semi-monthly reconciliation

Timezone and daylight-saving behavior

A midnight run should use the timezone that defines the relevant accounting or reporting date.

The interval varies with month length. Local midnight normally exists, but its UTC equivalent can change after an offset transition.

The expression does not contain a timezone. The scheduler supplies that context. Use the next-run preview above in the same IANA timezone as production, then confirm the target platform's own timezone rules.

Platform compatibility and converted expressions

The source expression is five-field Unix cron. Use the exact equivalent below rather than adding or removing fields by sight.

Platform compatibility for 0 0 15 * *
PlatformStatusExpressionWhat to know
Unix crontabReady0 0 15 * *Use directly in a normal five-field user crontab.
Kubernetes CronJobReady0 0 15 * *Use as spec.schedule; set spec.timeZone when local wall-clock behavior matters.
GitHub ActionsReady0 0 15 * *Use under on.schedule; UTC is the default and an IANA timezone may be specified.
Vercel Cron JobsReady0 0 15 * *Valid monthly schedule on all current plans, always evaluated in UTC.
AWS EventBridge SchedulerConvertcron(0 0 15 * ? *)Convert to AWS minute-first cron(...), add the required year, and use ? in one day field.
Spring @ScheduledConvert0 0 0 15 * *Use Spring’s six fields by prepending seconds and set zone explicitly when needed.
systemd timerConvert*-*-15 00:00:00Use OnCalendar syntax and validate it with systemd-analyze calendar on the target host.

Edge cases to check before deployment

  • This does not mean every 15 days.
  • If you need both the 1st and 15th, use 0 0 1,15 * * and make each period key explicit.
  • A weekend or public holiday does not postpone the run to a business day.

Frequently asked questions

What does the cron expression 0 0 15 * * mean?

0 0 15 * * means “run at midnight on the 15th of each month.” Once per month at the start of the fifteenth day.

What are the next run times for 0 0 15 * *?

After June 15 at 00:01, the next nominal run is July 15 at 00:00. Exact timestamps depend on the scheduler timezone and the current time.

What timezone does 0 0 15 * * use?

A midnight run should use the timezone that defines the relevant accounting or reporting date.

Can I use 0 0 15 * * on every scheduling platform?

No. It is a five-field Unix expression. Some platforms accept it directly, while AWS EventBridge Scheduler, Spring, and systemd require the converted form shown in the compatibility table.