Thanksgivings and Thursdays

Thanksgiving is not the last Thursday of November. I mean, it is this year, and it usually is, but that’s not how it’s determined. Since 1942, Thanksgiving—the US one, not the Canadian one—has been set by federal law to be the fourth Thursday in November. The law was passed in December of 1941, when you would have thought Congress and the White House had more important things to think about.

How often is Thanksgiving not the last Thursday of November? One way of thinking about it is to consider the day of the week of November 1st. If it falls on a Wednesday or Thursday, there will be five Thursdays that month. Another way is to consider the date of Thanksgiving. If it’s on the 22nd or 23rd, there will be a fifth Thursday after it. Let’s look at both.

Here’s a little Python code to list the Novembers since 1942 that have had five Thursdays using the first method:

python:
from datetime import date

for y in range(1942, 2026):
  nov1 = date(y, 11, 1)
  if nov1.weekday() == 2 or nov1.weekday() == 3:
    print(y, end=', ')

The result, after deleting the final comma and reformatting it to show six years per line, is

1944,  1945,  1950,  1951,  1956,  1961,
1962,  1967,  1972,  1973,  1978,  1979,
1984,  1989,  1990,  1995,  2000,  2001,
2006,  2007,  2012,  2017,  2018,  2023

which is 24 Novembers over the past 84 years. The gaps between five-Thursday Novembers are either one or five years.

Doing it again with the second method, we first define a utility function that returns the date of Thanksgiving for a given year and then check the day of the month for every year since 1942:

python:
def thanksgiving(y):
  day = (3 - date(y, 11, 1).weekday()) % 7 + 22
  return date(y, 11, day)

for y in range(1942, 2026):
  if thanksgiving(y).day < 24:
    print(y, end=', ')

The output is the same as before.

I should mention that thanksgiving takes advantage of Python’s sign convention for the modulo (%) operator. The result has the same sign as the divisor (the number after the %), regardless of the sign of the dividend (the number before the %). So

(3 - date(y, 11, 1).weekday()) % 7 + 1

returns the day of the month corresponding to the first Thursday of the month. Adding 21 to that gives us the fourth Thursday.

Getting 24 five-Thursday Novembers in 84 years is two-sevenths, which seems like the expected result for how often November starts on a Wednesday or Thursday. But will that be the result in the longer term?

The Gregorian calendar repeats every 400 years,1 so to get the fraction of Novembers with five Thursdays over the long haul, we have to check over that range:

The result is 0.285, which is just a hair less than 2/7 (0.285714). There’s no way for the answer to be exactly 2/7 because 400 isn’t divisible by 7, but this is awfully close.

Happy Thanksgiving!


  1. The calendar cycle repeats every 28 years except when that period includes a century year that isn’t divisible by 400.

    python: count = 0 for y in range(1942, 2342): nov1 = date(y, 11, 1) if nov1.weekday() == 2 or nov1.weekday() == 3: count += 1 print(count/400)