## What day of the week?

What day of the week was I born? Getting a calendar of that year could prove an impossible task, although if you are in front of a computer, there are `*nix` utilities that will do that for you. But seriously, who has access to a computer with `unix` or `linux` when the question pops?

There is a neat algorithm that, without the aid of pen and paper, will let you find the day of the week for any given date. It only takes six simple steps. On each of the first five steps, you come up with a different coefficient. In the last step, you add all those coefficients together and perform a very simple operation that offers a number between zero and six. This number indicates the day of the week:

- The
**CENTURY**step. The*century*coefficient, which we denote , is computed from the first two digits of the year. The coefficient for 20 is “minus one”, and for any other century, you can obtain the coefficient from the following table:For example, the first two digits of 1973 are 19: the corresponding coefficient is

- The
**YEAR**step. The*year*coefficient, which we denote , is computed from the last two digits of the year as the output of the following formula: if is the last two digits of the year, then where indicates the integer part of any given real number.

For example, the last two digits of 1973 are 73. Since the year coefficient is

- The
**MONTH**step: This is the part that takes some memorizing. The month coefficient is given by the table below. Lewis Carroll gave a very nice rule to construct that table:

January is “zero”; February and March are both “three” (the third month); December is “twelve” (the twelfth month). For each month that starts or ends in a vowel, its month number subtracted from ten. For the next month to one of those, the previous coefficient plus the number of days of the previous month.

For example, August has a two in the table. The month coefficient is thus

- The
**LEAP YEAR**step: Every year whose two last digits are a multiple of four is a leap year (except if those two digits are both zero—in that case, leap year occurs only if the whole year is a multiple of four-hundred). In case of leap year and the month being either January or February, we subtract one. Otherwise, zero.

For example, 1973 is not a leap year, so the coefficient is

- The
**DAY**step: The corresponding coefficient , is simply the day of the month.

For August 22, the coefficient is

- In the final step, we add up all the previous coefficients, and compute the remainder after division by seven (this is equivalent to add or subtract seven as many times as necessary so we obtain a number between zero and six). This indicates the day of the week, by the easy correspondence
**Sunday**is zero,**Monday**is one, and so on.

For example, for August 22, 1973, we have

The remainder is thus 3, and the day of the week is

**Wednesday**.

### Miscellaneous

With the help of the libraries `calendar` and `folding` of the package `tikz`, it is possible to generate this fun calendar printed on an unfolded dodecahedron. The code could not be simpler:

\usepackage{tikz}

\usetikzlibrary{folding,calendar}

\sffamily\scriptsize

\begin{center}

\begin{tikzpicture}[transform shape, every calendar/.style= {

at={(-8ex,4ex)}, week list, month label above centered, month

text=\bfseries\textcolor{red}{\%mt} \%y0, if={(Sunday) [black!50]}

}]

\tikzfoldingdodecahedron [

folding line length=2.5cm,

face 1={ \calendar [dates=\the\year-01-01 to \the\year-01-last];},

face 2={ \calendar [dates=\the\year-02-01 to \the\year-02-last];},

face 3={ \calendar [dates=\the\year-03-01 to \the\year-03-last];},

face 4={ \calendar [dates=\the\year-04-01 to \the\year-04-last];},

face 5={ \calendar [dates=\the\year-05-01 to \the\year-05-last];},

face 6={ \calendar [dates=\the\year-06-01 to \the\year-06-last];},

face 7={ \calendar [dates=\the\year-07-01 to \the\year-07-last];},

face 8={ \calendar [dates=\the\year-08-01 to \the\year-08-last];},

face 9={ \calendar [dates=\the\year-09-01 to \the\year-09-last];},

face 10={\calendar [dates=\the\year-10-01 to \the\year-10-last];},

face 11={\calendar [dates=\the\year-11-01 to \the\year-11-last];},

face 12={\calendar [dates=\the\year-12-01 to \the\year-12-last];}

];

\end{tikzpicture}

\end{center}

Also, a simple `python` module that uses this algorithm to compute the day of the week of a given date is included below:

def __init__(self,year,month,day):

self.year = year

self.month = month

self.day = day

monthCoeff = {‘January’:0, ‘February’:3, ‘March’:3,

‘April’:6, ‘May’:36, ‘June’:4,

‘July’:34, ‘August’:2, ‘September’:33,

‘October’:0, ‘November’:31, ‘December’:12}

week = {0:‘Sunday’, 1:‘Monday’, 2:‘Tuesday’,

3:‘Wednesday’, 4:‘Thursday’, 5:‘Friday’,

6:‘Saturday’}

def weekDay(aDate):

century = aDate.year/100

ending = aDate.year%100

if century>19:

C=2*(20-century)-1

else:

C=2*(19-century)

Y= ending + (ending)/4

beforeLeap=((aDate.month==‘January’) or (aDate.month==‘February’))

if (((ending==0) and (century%4==0) and beforeLeap)

or ((ending0) and (ending%4==0) and beforeLeap)):

L=-1

else:

L=0

M=monthCoeff[aDate.month]

D=aDate.day

return week[(C+Y+L+M+D)%7]

As an example of usage, we make use of the code to find the previous date’s day of the week:

**Python 2.6.1 (r261:67515, Feb 11 2010, 15:47:53)**

[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

Type “help”, “copyright”, “credits” or “license” for more information.

>>>import date

[GCC 4.2.1 (Apple Inc. build 5646)] on darwin

Type “help”, “copyright”, “credits” or “license” for more information.

>>>

**>>>**adate = date.myDate(year=1973,month=’August’,day=22)

**>>>**date.weekDay(adate)

‘Wednesday’