The months that need six rows on a calendar
Because the grid has to hold the blank cells before the 1st as well as the days themselves, and once that total passes 35 it spills into a sixth row. It needs a 31-day month starting in the last two columns, or a 30-day month starting in the last column. August 2026 with a Monday start is one: the 1st is a Saturday, so five blank cells precede 31 days, which is 36 cells and six rows. On A4 landscape with a 12 mm margin that pulls every day box down to 27.33 mm tall from the 32.8 mm a five-row month gets.
The calendar
Vector, dimensioned in millimetres, so every box prints at exactly the size quoted above. Print it from here to skip the page furniture, or save it and open it in anything.
Every day, and where it lands
| 1 | Saturday | 1 | 6 | 31 | 2026-08-01 |
| 2 | Sunday | 1 | 7 | 31 | 2026-08-02 |
| 3 | Monday | 2 | 1 | 32 | 2026-08-03 |
| 4 | Tuesday | 2 | 2 | 32 | 2026-08-04 |
| 5 | Wednesday | 2 | 3 | 32 | 2026-08-05 |
| 6 | Thursday | 2 | 4 | 32 | 2026-08-06 |
| 7 | Friday | 2 | 5 | 32 | 2026-08-07 |
| 8 | Saturday | 2 | 6 | 32 | 2026-08-08 |
| 9 | Sunday | 2 | 7 | 32 | 2026-08-09 |
| 10 | Monday | 3 | 1 | 33 | 2026-08-10 |
| 11 | Tuesday | 3 | 2 | 33 | 2026-08-11 |
| 12 | Wednesday | 3 | 3 | 33 | 2026-08-12 |
| 13 | Thursday | 3 | 4 | 33 | 2026-08-13 |
| 14 | Friday | 3 | 5 | 33 | 2026-08-14 |
| 15 | Saturday | 3 | 6 | 33 | 2026-08-15 |
| 16 | Sunday | 3 | 7 | 33 | 2026-08-16 |
Six rows need leadingBlanks plus days to exceed 35, so only a 31-day month starting in column six or seven, or a 30-day month starting in column seven, can do it.
It happens two or three times in most years, and the sheets look visibly different from the rest because every box loses about a sixth of its height.
Setting the space above the grid a few millimetres smaller for those months is usually enough to bring the boxes back to roughly the height of the other sheets in the set.
How it works
The formula
daysInMonth = 29 for February in a leap year, 28 otherwise
30 for April, June, September, November
31 for the rest
leap year = year mod 4 = 0 and (year mod 100 != 0 or year mod 400 = 0)
firstColumn = 0 for a Sunday start, 1 for Monday, 6 for Saturday
weekdays indexed Sunday = 0 … Saturday = 6
leadingBlanks = (weekdayOfThe1st - firstColumn + 7) mod 7
cells = leadingBlanks + daysInMonth
rows = ceil(cells / 7)
trailingBlanks = rows x 7 - cells
for the dth day:
offset = leadingBlanks + d - 1
row = floor(offset / 7) + 1
column = (offset mod 7) + 1
ISO 8601 weeks run Monday to Sunday, and week 1 is the week holding the
year's first Thursday:
isoWeekday = 1 for Monday … 7 for Sunday
thursday = dayNumber + (4 - isoWeekday)
weekYear = the calendar year that thursday falls in
isoWeek = floor((thursday - 1 January of weekYear) / 7) + 1
columns = 8 when a week-number column is shown, otherwise 7
boxWidth = (pageWidth - 2 x margin) / columns
boxHeight = (pageHeight - 2 x margin - headingSpace) / rows
Every length is held as a whole number of micrometres up to that last
division. Every day number is integer arithmetic throughout.
What it assumes
- Dates are computed in the proleptic Gregorian calendar for every year from 1583 onwards, which is why that is the earliest year offered. Britain and its colonies kept the Julian calendar until September 1752, so for a month before then this tool disagrees with the calendar people were actually using at the time — by ten days in 1583 and by eleven by 1752.
- The day the week starts on is chosen explicitly rather than inferred from the language. CLDR does record a first day per territory, but it is keyed on region and not on language, so "French" alone does not answer the question — and the setting changes the row count, which makes guessing it wrong more than a cosmetic error.
- ISO week numbers always count Monday-to-Sunday weeks, whatever day the grid starts on. A Sunday-start calendar therefore shows, against its first row, a week number for a week that began the day before that row does.
- Every column is the same width and every row the same height, including the week-number column when it is switched on. Printed calendars often narrow the week-number column or the weekend, and none of those conventions is standard enough to compute from.
- Paper sizes are trimmed sizes. Your printer's own hardware border, usually 4 to 6 mm and often wider at the trailing edge, is not deducted, so a margin below about 5 mm will be clipped by the printer rather than by anything here.
- Month and weekday names come from the locale data built into the browser reading this page. A cut-down build of that data, which a few embedded and self-compiled runtimes ship, falls back to English without saying so.
Common questions
How often does a month need six rows?
Roughly a third of the time, and it depends on the start-of-week setting as much as on the month. A 31-day month beginning on either of the last two days of the week needs six rows, and February needs six only when it has 29 days and begins on the last day of the week.
Can I force every month into five rows?
Not without losing days or shrinking the cells until they are useless to write in. A fixed five-row grid is what makes some printed calendars fold the last two days into a single box — acceptable on a wall chart, wrong for anything you write appointments in.
Sources
The full method, worked example and every assumption behind this figure are on Printable Month Calendar Planner.