Yearly Calendar

Twelve months on one page, with today marked, US federal holidays listed, and the day and business-day math worked out for whichever year you pick.

Yearly calendar grid

January
SunMonTueWedThuFriSat
February
SunMonTueWedThuFriSat
March
SunMonTueWedThuFriSat
April
SunMonTueWedThuFriSat
May
SunMonTueWedThuFriSat
June
SunMonTueWedThuFriSat
July
SunMonTueWedThuFriSat
August
SunMonTueWedThuFriSat
September
SunMonTueWedThuFriSat
October
SunMonTueWedThuFriSat
November
SunMonTueWedThuFriSat
December
SunMonTueWedThuFriSat

Year at a glance

Total days
365
Weekend days
104
Weekdays
261
Business days
251
Leap year
No
ISO weeks
52
January 1 falls on
Thursday
Longest month
January (31 days)

Northern Hemisphere seasons (calendar approximation, not exact solstice or equinox timing): spring starts March 20, summer June 21, autumn September 22, winter December 21.

US federal holidays this year

DateDayHoliday

How the month grid lines up

Two numbers decide every month's shape: how many days it holds, and which weekday day one lands on. Get either wrong and the grid drifts.

This page leaves both to the browser's own date math rather than a lookup table. new Date(year, month + 1, 0).getDate() returns the last day of a month, which doubles as its length. new Date(year, month, 1).getDay() returns the weekday the first falls on, in the zero-to-six range Sunday through Saturday. Everything else, the empty lead-in cells, the weekend shading, the today marker, follows from those two calls.

Leap years are the one place this gets interesting. The Gregorian rule is three tests deep: a year divisible by 4 is a leap year, unless it is also divisible by 100, in which case it is not, unless it is also divisible by 400, in which case it is after all.

ConditionResultExample
Divisible by 4Leap year2024
Divisible by 4 and 100Not a leap year1900
Divisible by 4, 100, and 400Leap year2000

2100 will not be a leap year under this rule, which surprises people who only remember the "every four years" version.

Where the holiday dates come from

Four of the ten US federal holidays sit on a fixed date every year: New Year's Day, Independence Day, Veterans Day, and Christmas. The other six move, because they are defined relative to a weekday rather than a day number.

  • Martin Luther King Jr. Day and Presidents' Day: the third Monday of January and February.
  • Memorial Day: the last Monday of May.
  • Labor Day: the first Monday of September.
  • Columbus Day: the second Monday of October.
  • Thanksgiving: the fourth Thursday of November.

The table above recalculates each of those weekday rules for whatever year is selected, rather than storing a fixed list of dates. That is why switching years also reshuffles which dates show up next to each holiday name.

Where this calendar stops short: the holiday list is the US federal schedule specifically. It says nothing about UK bank holidays, Canadian statutory holidays, or any other country's calendar, and it does not know about your employer's floating days off or regional closures.

The year dropdown only runs ten years back and ten forward from today, because that range comes from the server request rather than a stored table. Need 1850 or 2400? A general-purpose date library will get you there faster than this page will.

There is also no export, no saved events, and no reminders here. Treat it as a reference grid. For anything that involves acting on a date rather than looking one up, the business days calculator or the countdown timer linked below will do more of the work.

Calendar tool questions

Specifics about the year range, the holiday rules, and what this grid does not track.

Why does the year dropdown stop ten years in each direction?

The list is built from the year on the request, minus ten and plus ten. It is not a fixed table, so the range always centers on whatever "today" is when the page loads, not a hardcoded start and end year.

Are the holiday dates pulled from an outside API?

No. Four holidays use a fixed month and day. The other six are computed from weekday rules, such as third Monday of January, using plain date arithmetic in the browser. Nothing is fetched over the network for this.

Does this follow a religious or regional calendar?

No. The grid is Gregorian only, and the holiday list is the US federal schedule. Islamic, Hebrew, Chinese, and other calendar systems are not represented here.

My business-day count looks off. Why?

The count excludes Saturdays, Sundays, and the ten US federal holidays shown above. It has no idea about company-specific closures, regional public holidays, or shortened weeks, so treat it as a baseline, not a final answer for payroll or scheduling.

Can I print a month or a full year?

Yes. The grid is a plain HTML table, so a browser print dialog (Ctrl+P or Cmd+P) renders it cleanly on standard paper without extra setup.