Runs in your browser. Your files and text never leave your device - nothing is uploaded.
At 12:00 AM, on day 1 of the month
Next 8 run times
- Sun, Nov 1, 2026, 12:00 AM
- Tue, Dec 1, 2026, 12:00 AM
- Fri, Jan 1, 2027, 12:00 AM
- Mon, Feb 1, 2027, 12:00 AM
- Mon, Mar 1, 2027, 12:00 AM
- Thu, Apr 1, 2027, 12:00 AM
- Sat, May 1, 2027, 12:00 AM
- Tue, Jun 1, 2027, 12:00 AM
Standard 5-field cron syntax: minute, hour, day of month, month, day of week. Next run times are computed in your browser's local timezone.
What is the cron expression for every 1st of the month?
0 0 1 * * runs a job at midnight (00:00) on the 1st of every month: minute 0, hour 0, day of month 1, any month and any weekday. It fires 12 times a year, the same as the @monthly shortcut on Vixie-style crons. For a later time on the 1st, change the hour.
0 0 1 * * field by field
| Field | Allowed | Value | Selects |
|---|---|---|---|
| Minute | 0-59 | 0 | minute 0, on the hour |
| Hour | 0-23 | 0 | hour 0 only, midnight |
| Day of month | 1-31 | 1 | the 1st of the month only |
| Month | 1-12 or JAN-DEC | * | every month |
| Day of week | 0-6 or SUN-SAT (0 = Sunday; many crons also accept 7) | * | any weekday |
Only the day-of-month field is restricted here, so the weekday is ignored. Put anything other than * in the day-of-week field and cron would run on dates matching either field, not both.
How often 0 0 1 * * runs in 2026
- Runs on each matching day: 1.
- Matching days in 2026: 12 of 365.
- Total runs in 2026: 12.
- First run of the year: Thu, 1 Jan 2026, 00:00 UTC. Last: Tue, 1 Dec 2026, 00:00 UTC.
These counts use UTC, which has no daylight saving. The run list in the generator shows the next runs in your browser's own time zone instead.
The same schedule in other schedulers
| Scheduler | Write it as | Watch out for |
|---|---|---|
| crontab (Linux, macOS) | 0 0 1 * * /usr/local/bin/monthly-invoices.sh | Add it with crontab -e. In /etc/crontab a user name goes between the time fields and the command. |
| Kubernetes CronJob | schedule: "0 0 1 * *" | Valid; @monthly is equivalent. |
| GitHub Actions | - cron: '0 0 1 * *' | Runs at 00:00 UTC on the 1st, the previous evening in the Americas. |
| AWS EventBridge | cron(0 0 1 * ? *) | Day of week must be ? when a date is given. |
| Quartz | 0 0 0 1 * ? | Use L in the day-of-month field instead of 1 for the last day of the month. |
Time zones and daylight saving
The 1st of the month begins at different instants around the world. On a UTC scheduler, a first-of-the-month invoice run happens on the evening of the last day of the previous month in the Americas: 8 p.m. in New York during summer time. If billing depends on the local calendar date, pin the time zone (Kubernetes timeZone, GitHub Actions timezone, EventBridge Scheduler) rather than guessing an offset.
Common mistakes with 0 0 1 * *
- Asking for the last day of the month. Standard cron cannot express it; use
Lin Quartz or EventBridge, or run0 0 28-31 * *and exit unless[ "$(date -d tomorrow +\%d)" = 01 ]succeeds. - Adding a weekday:
0 0 1 * 1runs on the 1st and on every Monday, 63 times in 2026, not on "the 1st if it is a Monday". - Moving the job to the 31st or 30th:
0 0 31 * *runs in only 7 months a year, and0 0 30 * *skips February.
Frequently asked questions
0 0 1 * * - At 12:00 AM, on day 1 of the month. Evaluated in UTC, that comes to 12 runs in 2026, the first at Thu, 1 Jan 2026, 00:00 UTC.
Yes. With the day-of-week field left as *, cron matches the date alone, so the job fires on the 1st whatever the weekday; 1 February 2026 is a Sunday and it still runs. Moving weekend dates to a weekday needs logic in the script, or the W (nearest weekday) flag in Quartz or EventBridge.
EventBridge: cron(0 0 1 * ? *). Quartz: 0 0 0 1 * ?. EventBridge adds a year field at the end and Quartz a seconds field at the start, and both need ? in one day field - here the day-of-week field, because the schedule names no weekday.
Other common schedules
Reviewed by Raja Jahangir · Last reviewed: October 7, 2026
