Skip to content

Cron Every Quarter (Every 3 Months)

Every 3 months is */3 in the month field, which picks January, April, July and October. On the 1st at midnight, that is the start of each calendar quarter.

minute · hour · day · month · weekday

Build it with controlsCustom

This expression is more detailed than these choices. Edit it in the box above, or pick one to start a new schedule.

In plain English

At midnight on the 1st of the month, every 3 months (January, April, July and October).

Tap a field to see what it means.

A week0 runs
Mon–Tue–Wed–Thu–Fri–Sat–Sun–
Next run
—
Usually every
—
Time zone
Yours
Convert to another schedulerQuartz, Spring, AWS, GitHub Actions, Kubernetes
The same schedule in every dialect
Standard cron0 0 1 */3 *current
Quartz0 0 0 1 1/3 ?
Spring0 0 0 1 */3 *
AWS EventBridgecron(0 0 1 1/3 ? *)
GitHub Actions0 0 1 */3 *
Kubernetes0 0 1 */3 *
About Standard cronTime zone, day numbering, daylight saving
  • Runs in the machine’s local time zone; cronie also reads CRON_TZ at the top of the crontab.
  • Five fields, then the command. Day of week is 0–7 (0 and 7 are Sunday) or SUN–SAT; months 1–12 or JAN–DEC.
  • When both day fields are set, a day that matches either one runs.
  • Daylight saving: a job at a fixed time in a skipped hour runs right after the change, and one in a repeated hour runs once. Jobs with * in the minute or hour follow the clock.

Sources: crontab(5), cronie, cron(8), cronie, POSIX crontab.

How this works: Method, 10 sources, Checked against 1 worked example,

How this works

Method

The expression is read field by field with the rules of the scheduler you pick (ranges, lists, steps, names, @ macros, and L, W and # where it has them) into the values each field allows. The next runs come from stepping forward through the calendar in the chosen time zone, day by day and then time by time, using that scheduler’s rule for when both day fields are set and its documented rule for daylight saving (where it has none, a skipped time is skipped and a repeated one runs once). A conversion to another scheduler is parsed back and checked against the original before it is shown.

How it’s tested

One worked example for this page is checked by automated tests before every release: given the inputs, the tool must show the expected answer.

Changes

  • First version: plain English and the next runs for six schedulers, a builder, conversion between them, and 20 pages for common schedules.

How we make toolsReport a mistake

Worked example: 0 0 1 */3 *

Say the clock reads Monday 4 January 2027, 12:00 AM UTC. 0 0 1 */3 * means “at midnight on the 1st of the month, every 3 months (January, April, July and October)”, so the next five runs are Thursday 1 April 2027, 12:00 AM, Thursday 1 July 2027, 12:00 AM, Friday 1 October 2027, 12:00 AM, Saturday 1 January 2028, 12:00 AM and Saturday 1 April 2028, 12:00 AM.

In UTC, where no clock change interrupts it, that comes to 4 runs in 2027.

Every third month

The fourth field is the month. */3 there counts from January in steps of three: January, April, July and October. With 1 in the day-of-month field and midnight in front, 0 0 1 */3 * runs at the start of each calendar quarter, four times a year.

The same months can be listed, 1,4,7,10, which is easier to shift: for quarter-ends, list 3,6,9,12 and use the last day of the month (L in Quartz, Spring and AWS).

Fiscal quarters that start in another month just need a different start for the step: 1 2-12/3 picks February, May, August and November.

Pitfalls

  • In Quartz, 7/6 in the month field is only July: a step that runs past December doesn’t wrap into the next year.
  • Quarter-end on the 31st fails in June and September, which have 30 days; use L where available.
  • The month is judged in the scheduler’s time zone, so a UTC run on 1 April is still 31 March in the Americas.
  • Quartz: “7/6” in the month field only turns on month 7; it does not mean every 6th month. Source: Quartz CronExpression.
  • Month takes 1–12 or the names JAN–DEC in Linux cron, and ranges and lists of names are allowed. Source: crontab(5), cronie.

“Every Quarter” in every scheduler

The same schedule written for each scheduler, converted and checked by this tool. A dash means that scheduler can’t express it in one expression; the note says why.

The same schedule written for each scheduler, converted and checked by this tool. A dash means that scheduler can’t express it in one expression; the note says why.
SchedulerExpressionNote
Standard Unix cron (Vixie cron, cronie)0 0 1 */3 *
Quartz Scheduler (Java)0 0 0 1 1/3 ?
Spring Framework @Scheduled0 0 0 1 */3 *
Amazon EventBridge cron()cron(0 0 1 1/3 ? *)
GitHub Actions schedule0 0 1 */3 *
Kubernetes CronJob0 0 1 */3 *

Frequently Asked Questions

What is the cron for every quarter?

0 0 1 */3 * runs at midnight on 1 January, 1 April, 1 July and 1 October. 0 0 1 1,4,7,10 * is the same.

How do I run at the end of each quarter?

In Quartz: 0 0 0 L 3,6,9,12 ? runs on the last day of March, June, September and December. Linux cron needs the 28-31 trick with a date test.

Does */3 count from the month I set it up?

No. Steps count from the first value of the field, January, whatever the date today.