Monthly Calendar Generator
February 2024 has 29 days, starts on Thursday, and occupies five Sunday-start calendar rows. This monthly calendar generator creates a Gregorian month grid for a whole-number year from 1 through 9999. Choose Sunday or Monday as the first column, then print or save the resulting seven-column layout. The code uses UTC calendar dates, so weekday placement does not change with the viewer's time zone. Blank cells are padding outside the selected month, not dates from the adjacent month. The output does not include holidays, locale-specific observances, appointments, week numbers, or historical calendar-system changes.
Quick answer
Pick any month and year and the grid updates right away.
July 2026
| SunSunday | MonMonday | TueTuesday | WedWednesday | ThuThursday | FriFriday | SatSaturday |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
What this tells you
- •Pick any month and year and the grid updates right away.
- •Choose whether the week starts on Sunday or Monday to match your region.
- •Each month is laid out in rows of seven days, padded so every row is full.
- •February shows 29 days in a leap year and 28 days otherwise.
- •Years divisible by 100 are not leap years unless they are also divisible by 400.
- •Changing week start reorders columns and padding but does not change a date's actual weekday.
- •The generator uses UTC and Gregorian calendar rules for every supported year.
- •A month can occupy four, five, or six rows depending on length and starting weekday.
- •Zero values in the internal grid represent blank padding cells.
How to Use
- 1Choose a month from January through December.
- 2Enter a whole-number year from 1 through 9999.
- 3Choose Sunday or Monday as the first weekday column.
- 4Check the month name, number of days, first weekday, and date placement.
- 5Read blank cells as alignment padding outside the month.
- 6Use the print control and review the browser preview before printing or saving as PDF.
- 7Add holidays, deadlines, or events separately because the generator does not know a location or schedule.
How It Works
Formula
grid = blank pads + days 1..N, laid out in rows of 7 from the first weekdayThe generator uses day 0 of the following month to find the selected month's length, then reads the UTC weekday of day 1. Leading blanks equal (first weekday - week start + 7) modulo 7. It appends days 1 through N and adds trailing zeros until the cell count is divisible by seven. Splitting those cells into groups of seven creates the rows. Gregorian leap rules are supplied by UTC date arithmetic.
Calculation note: values are processed in the order shown above, using the current input units.
Worked Examples
Build a December 2025 calendar
December 2025 has 31 days and the first falls on a Monday. With a Sunday start, the first row begins with one blank cell, then December 1 sits in the Monday column.
Build a February 2024 calendar
2024 is a leap year, so February shows 29 days. February 1, 2024 falls on a Thursday, so the first three days sit at the end of the opening row.
February 1900 is not a leap month
1900 is divisible by 100 but not 400, so February has 28 days. Monday-start padding places day 1 under Thursday.
February 2000 is a leap month
2000 is divisible by 400, so February has 29 days. In the Monday-start grid, one blank cell appears before Tuesday, February 1.
Six-row month
One leading row position plus 31 dates requires 37 cells, which pads to 42 cells or six rows.
Days in Each Month
How many days each month has, including February in leap years.
| Month | Days |
|---|---|
| January | 31 |
| February | 28 (29 in a leap year) |
| March | 31 |
| April | 30 |
| May | 31 |
| June | 30 |
| July | 31 |
| August | 31 |
| September | 30 |
| October | 31 |
| November | 30 |
| December | 31 |
A leap year happens every 4 years, except for century years that are not divisible by 400. So 2000 was a leap year but 1900 was not.
How week start changes the layout
Sunday-start columns run Sunday through Saturday. Monday-start columns run Monday through Sunday. The selected convention changes the position of blank padding, but August 1, 2020 remains a Saturday in either layout.
Four rows are possible only when a 28-day February starts on the selected first weekday. Most months use five rows. A 30- or 31-day month that begins late in the week can require six.
UTC keeps date-only calculations stable across locations. This is useful for a generic printable grid, but it also means the tool does not model local timestamps, historical adoption of the Gregorian calendar, or region-specific week-number conventions.
Common mistakes
- Forgetting that February has 29 days in a leap year. The generator handles this for you based on the year you pick.
- Assuming every month starts on the same weekday. The starting weekday shifts each month, which is why the blank cells move.
- Mixing up Sunday-start and Monday-start layouts. Set the week start to match your region so the columns line up the way you expect.
- Treating blank padding cells as dates from the previous or next month
- Assuming every century year is a leap year when 1900 was not and 2000 was
- Expecting holidays or observances without selecting a country or region
- Using the grid as a legal or business-day schedule without adding closures and deadlines
Embed this calculator on your site
Drop this single line where you want the calculator to appear. It is responsive, mobile-friendly, resizes automatically, and is free to use with attribution.
<script src="https://calctide.com/embed.js" data-tool="monthly-calendar-generator" async></script>Preview the embed at /embed/monthly-calendar-generator/.