A Mental Perpetual Calendar for the 21st Century
Wes Munsil
November 5, 2004 (Friday)

Here's a perpetual calendar that you can use to find the day of the week on which any date from January 1, 2000 to December 31, 2099* falls. With a little practice, you should be able to do this in your head. I illustrate the steps with the example date of October 24, 2007.

  1. Subtract 2000 from the year. (Example: 2007 − 2000 = 7.)
  2. Divide by 4, discarding any remainder. (Example: 7 / 4 = 1.)
  3. Subtract from 24. (Example: 24 − 1 = 23.)
  4. Double. (Example: 23 x 2 = 46.)
  5. If the year is a leap year, do nothing; otherwise, add 2, 3, or 4, depending on whether it's the second, third, or fourth year of a four-year period beginning with a leap year. (Example: 46 + 4 = 50.)
  6. The result so far tells the day of the week on which the year begins. To find the day of the week on which the month begins, add a compensation for the month. This is the number of letters in the appropriate word from a mnemonic phrase. For non-leap years, use "Can you devise a good system of dates? Yes, maybe." For leap years, use "It's leap! I'm stuck! You devise a good system!"

    For non-leap years:
    January                    0
    February        Can        3
    March           you        3
    April           devise     6
    May             a          1
    June            good       4
    July            system     6
    August          of         2
    September       dates?     5
    October                    0
    November        Yes,       3
    December        maybe.     5
    
    For leap years:
    January                    0
    February        It's       3
    March           leap!      4
    April                      0
    May             I'm        2
    June            stuck!     5
    July                       0
    August          You        3
    September       devise     6
    October         a          1
    November        good       4
    December        system!    6
    
    (Example: 50 + 0 = 50.)
  7. Add the number of days from the first of the month to the desired date. (Example: 50 + 23 = 73.)
  8. Finally, take the result mod 7. (Example: 73 mod 7 = 3.)
  9. The result is the day of the week, where 0 = Sunday, 1 = Monday, ..., 6 = Saturday. (Example: 3 = Wednesday.)

You might find it easier to do the mod 7 as you go, since it keeps the numbers smaller. You can do this anywhere from step 3 on. (If you're worried about doing a mod 7 in your head, just think of it as subtracting 7 whenever your number is bigger than 7.)

To illustrate, I repeat the example of October 24, 2007, doing the mod 7 from step 3 on.

  1. 2007 − 2000 = 7.
  2. 7 / 4 = 1.
  3. 24 − 1 = 23 → 16 → 9 → 2.
  4. 2 x 2 = 4.
  5. 4 + 4 = 8 → 1.
  6. 1 + 0 = 1.
  7. 1 + 23 = 24 → 17 → 10 → 3, Wednesday.

* Yes, I know that conventionally 2000 is considered the last year of the 20th century, and 2100 is considered the last year of the 21st century. But this procedure does work for the year 2000 too; and if you want to handle the year 2100, start at step 6 with the number 5—and remember that 2100 is not a leap year.