This page uses content from the English Wikipedia. The original article was at Calculating the day of the week. The list of authors can be seen in the page history. As with the Calendar Wikia, the text of Wikipedia is available under Creative Commons License. See Wikia:Licensing. |
This article details various mathematical algorithms to calculate the day of the week for any particular date in the past or future.
A typical application is to calculate the day of the week on which someone was born or some other special event occurred.
Contents
Introduction[]
The basis of nearly all the algorithms to calculate the day of the week is:
- Use arithmetic modulo 7 to add the number of days elapsed since the start of a known period (usually in practice a century). If we number the days of the week from 0 to 6 the result is some modulo value; if we use the range from 1 to 7, then 7 replaces 0.
- To look up or calculate using a known rule what day the given century started on.
- To look up or calculate what day the given year in that century started on.
- To look up or calculate what day the given month in that year in that century started on.
- To then add on the day of the month - this of course being the days elapsed since the month started.
Put simply, using arithmetic modulo 7 means ignoring multiples of 7 during calculations. Thus we can treat 7 as 0, 8 as 1, 9 as 2, 18 as 4 and so on; the interpretation of this being that if we signify Sunday as day 0, then 7 days later (i.e. day 7) is also a Sunday, and day 18 will be the same as day 4, which is a Thursday since this falls 4 days after Sunday. Some algorithms do all the additions first and then cast out sevens whereas others cast them out at each step. Either way is quite permissible; the former is better when using calculators and in computer algorithms, the latter for mental calculation (it is quite possible to do all the calculations in one's head with a little practice).
Useful concepts[]
Corresponding months[]
"Corresponding months" are those months within the calendar year that start on the same day. For example, September and December correspond, because September 1 falls on the same day as December 1. Months can only correspond if the number of days between their first days is divisible by 7, or in other words, if their first days are a whole number of weeks apart. For example, February corresponds to March because February has 28 days, a number divisible by 7, 28 days being exactly four weeks. In a leap year, January and February correspond to different months than in a common year, since February 29 means each subsequent month starts a day later.
Here's how the months correspond:
- Common year
- January and October.
- February, March and November.
- April and July.
- Leap year
- January, April and July.
- February and August.
- March and November.
- All years
- September and December.
August doesn't correspond with any other month in a common year. October doesn't correspond with any other month in a leap year. May and June never correspond with any other month in any year, common or leap year. Also note that in the months table below, corresponding months have the same number, a fact which follows directly from the definition.
Corresponding years[]
There are 7 possible days that a year can start on, and leap years will alter the day of the week after February 29. This means that there are 14 configurations that a year can have. All the configurations are referenced in the article on Dominical letter. For example, 2003 was a common year starting on Wednesday, meaning that 2003 corresponds to the 1997 calendar year. 2004, on the other hand, was a leap year starting on Thursday, meaning that the year starts off corresponding to 1998 and ends corresponding to 1999.
The algorithm to calculate the day of the week[]
The algorithm is valid for the Gregorian calendar. This began in Britain and her colonies on September 14, 1752. The area now forming the United States changed at different times depending on the colonial power; Spain, France, Italy, and others had changed in 1582 and Russia had not changed by 1867 when Alaska was purchased by the U.S. from Russia.
It should be noted that, in this algorithm, the days on which the century, year, and month start are the "zeroth" day. This allows us to add the day of the month directly (without subtracting 1). For example, 1900 starts on day 0 which corresponds to a Sunday; however, we still need to add 1 for the January 1 which brings the day on which January 1 1900 fell to day 1, which is Monday, the correct day.
- Centuries First, we can either refer to the centuries table below or use the rule: Divide centuries-figure by 4, take the remainder from 3, then multiply the result by 2.
- For example, for years beginning 18 (1800-1899), 18/4 gives remainder 2, 3-2=1 then 2*1 = 2.
- Years Because there are 365 days in a common year, which is 52 weeks plus 1 day, each year will start on the day of the week after that starting the preceding year. Each leap year has of course one more day than a common year. Assuming we know on which day a century starts (from above), if we add the number of years elapsed since the start of the century, plus the number of leap years that have elapsed since the start of the century, we get the day of the week on which the year starts.
- Taking 1978 as an example, 78 common years would add 78 to the start-day of the century, but there have been 78/4 = 19 leap years since 1900 (we can ignore the remainder since the 2 years since 1976 contribute no extra leap-day). So 1978 started on day 0 + 78 + 19 = 97 which is the same as day 6.
- Alternatively, divide the year by twelve, add the remainder to the quotient, and add the number of times four goes into the remainder. For 1978: 78/12 = 6 remainder 6. 4 goes into 6 once and 6 + 6 + 1 = 13, which is the same day as 6.
- Months We refer to the months table below to work out on which day of the week a month starts. Notice that January starts on day 0, which is simply another way of saying that the year and January of that year start on the same day. The months table shown allows for leap years; other algorithms leave the correction to the end and then deduct 1 from the final figure if the month is a January or February of a leap year.
- Day of the Month Once we know on which day of the week the month starts, we simply add the day of the month to find the final result (noting that as mentioned above, we've been working with the "zeroth" day of the month as the start). For example, January 22 will be 22 days after the start of January, so we add 22.
Examples[]
Now for an example of the complete algorithm, let's use April 24, 1982.
- Look up the 1900s in the centuries table: 0
- Note the last two digits of the year: 82
- Divide the 82 by 4: 82/4 = 20.5 and drop the fractional part: 20
- Look up April in the months table: 6
- Add all numbers from steps 1-4 to the day of the month (in this case, 24): 0+82+20+6+24=132.
- Divide the sum from step 5 by 7 and find the remainder: 132/7=18 remainder 6
- Find the remainder in the days table: 6=Saturday.
Now let's try September 18, 1783.
- Look up the 1700s in the centuries table: 4
- Note the last two digits of the year: 83
- Divide the 83 by 4: 83/4 = 20.75 and drop the fractional part: 20
- Look up September in the months table: 5
- Add all numbers from steps 1-4 to the day of the month (in this case, 18): 4+83+20+5+18=130.
- Divide the sum from step 5 by 7 and find the remainder: 130/7=18 remainder 4
- Find the remainder in the days table: 4=Thursday.
Finally, let's try June 19, 2054
- Look up the 2000s in the centuries table: 6
- Note the last two digits of the year: 54
- Divide the 54 by 4: 54/4 = 13.5 and drop the fractional part: 13
- Look up June in the months table: 4
- Add all numbers from steps 1-4 to the day of the month (in this case, 19): 6+54+13+4+19=96.
- Divide the sum from step 5 by 7 and find the remainder: 96/7=13 remainder 5
- Find the remainder in the days table: 5=Friday.
Centuries table[]
Century | Century term | Notes |
---|---|---|
1700s 1700-1799 | 4 | (Still Julian Calendar in Great Britain and its lands until 1752) |
1800s 1800-1899 | 2 | |
1900s 1900-1999 | 0 | |
2000s 2000-2099 | 6 | |
2100s 2100-2199 | 4 |
Months table[]
Month | Month term |
---|---|
January | 0 (6 in case of leap year) |
February | 3 (2 in case of leap year) |
March | 3 |
April | 6 |
May | 1 |
June | 4 |
July | 6 |
August | 2 |
September | 5 |
October | 0 |
November | 3 |
December | 5 |
Days table[]
Day of week | Corresponding numeric value |
---|---|
Sunday | 0 |
Monday | 1 |
Tuesday | 2 |
Wednesday | 3 |
Thursday | 4 |
Friday | 5 |
Saturday | 6 |
One can add constants (modulo 7) to these three tables provided the constant you add to the day table is equal to the sum of the constants you add to the centuries table and the months table modulo 7.
Mental calculation[]
An easy way to do the calculation in your head is to imagine the year starts on March 1 rather than January 1 (as it did in Roman times), so that the extra day in a leap year is the last day, rather than occurring in the middle of the year. That is, "day 0" described above is the last day of February.
April 4, June 6, August 8, October 10 and December 12 all occur on the same day as day 0 (note that April is the 4th month, June the 6th, August the 8th, etc).
May 9 and September 5 are also the same day as day 0 (May is the 5th month and September the 9th — think of the Dolly Parton song "9 to 5": the 9th day of the 5th month and the 5th day of the 9th month).
July 11 and November 7 are the same day as day 0 (the 7th and 11th months, respectively -- think of the 7-Eleven shops).
This day of the week is called Doomsday in the Doomsday algorithm, which uses these very same mnemonics.
However, if one regards the new year as beginning on March 1 one has a simpler situation for February and January. January 16 and February 6 are the same day of the week as the previous last day of February (i.e. last year's Doomsday) for every year.
Also within each year beginning March 1, five months is always exactly 153 days and hence one day short of a whole number of weeks. This gives rise to the following dates on the same day of week starting with April 4, June 6 etc.
Month | +5 months | -5 months | +10 Months |
---|---|---|---|
April 4 | September 5 | February 6 | |
June 6 | November 7 | ||
August 8 | January 9 | March 7 | |
October 10 | May 9 | ||
December 12 | July 11 |
So if you can figure out what day "day 0" is, you can quickly find a date in any month that falls on the same day, and you only have to add or subtract a few days to get to any other day in the month.
Memorize this: in 2000, day 0 was a Tuesday. Every century, day 0 changes according to the following pattern: Tuesday, Sunday, Friday, Wednesday, Tuesday, Sunday, Friday, Wednesday, ... (mnemonic: "it's Too Sunny For Work" - "too" for Tuesday); i.e., in 2100 day 0 will be Sunday; in 1900 it was Wednesday. Every common year, day 0 moves forward one day, and two days every leap year; it moves ahead one day every 12 years (2000 is a Tuesday, 2012 is a Wednesday, 2024 is a Thursday, etc.). Also convenient can be that one can ignore periods of 28 years as long as they are within a century or across 2000: 1972 and 2028 are also Tuesday.
So let's say you want to know what day June 3 2017 will be. Day 0 for 2000 was a Tuesday, in 2012 it will be Wednesday, 2013 will be Thursday, 2014 Friday, 2015 Saturday, 2016 (a leap year) Monday, and 2017 Tuesday; June is the 6th month, so the June 6 is a Tuesday. Three days earlier is Saturday.
Purely mathematical methods[]
Gaussian algorithm[]
The Gaussian algorithm is much more compact and works without any lookup tables. A slight disadvantage is the unusual month and year counting convention. The formula is
Where
- Y: year-1 for January or February,
- year for the rest of the year
- d: day (1 to 31)
- m: shifted month (March=1,...February=12), i.e. ((month + 9) % 12) + 1
- y: last 2 digits of Y
- c: first 2 digits of Y
- w: day of week (0=Sunday,..6=Saturday)
Note: There are two different ways that modulo can handle negative numbers. For this equation to work properly
''
needs to return a positive number if '' is a negative number.
Zeller’s algorithm[]
For more detail, see Zeller's congruence.
In Zeller’s algorithm, the months are numbered from 3 for March to 14 for February. The year is assumed to begin in March; this means, for example, that January 1995 is to be treated as month 13 of 1994.
Tondering's algorithm[]
Claus Tondering's algorithm uses a variant of the method of congruence used by Gauss, thereby shifting month-numbers by the same amount, and arriving at the same adjustment for a given month. It differs from the rest of the Gaussian algorithm by not splitting off the nominal century from the year, and by dividing itself into separate equations - the last being equivalent term-for-term to the expression used in Sakamoto's method to calculate the day of the week.^{[1]}
Babwani's formula
<a data-rte-meta="%7B%22type%22%3A%22external%22%2C%22text%22%3A%22Sohael%20S.%20Babwani%27s%22%2C%22link%22%3A%22http%3A%5C%2F%5C%2Fwww.babwani-congruence.blogspot.in%5C%2F%22%2C%22linktype%22%3A%22text%22%2C%22wasblank%22%3Afalse%2C%22wikitext%22%3A%22%5Bhttp%3A%5C%2F%5C%2Fwww.babwani-congruence.blogspot.in%5C%2F%20Sohael%20S.%20Babwani%27s%5D%22%7D" data-rte-instance="2412-10451151815f21cf58075c9" rel="nofollow" class="external text" href="<a rel="nofollow" class="external free" href="http://www.babwani-congruence.blogspot.in/">http://www.babwani-congruence.blogspot.in/</a>">Sohael S. Babwani's</a> method of finding the weekday was published in The Mathematical Gazette, London in November 2004. He developed alternative formulae which are difficult to use, yet allow one to find answers when other information is given or absent. Despite being easier to understand, the other known methods (Lachman's etc.) cannot find solutions to more complex questions.
In Zeller’s algorithm the months are numbered from 3 for March to 14 for February. The year is assumed to begin in March; this means, for example, that January 1995 is to be treated as month 13 of 1994. But in Babwani's method of finding the weekday, the months are numbered properly 1 for January to 12 for December. See "<a data-rte-meta="%7B%22type%22%3A%22external%22%2C%22text%22%3A%22An%20extended%20approach%20to%20the%20Julian%20and%20the%20Gregorian%20calendar%22%2C%22link%22%3A%22http%3A%5C%2F%5C%2Fwww.babwani-congruence.blogspot.in%5C%2F%22%2C%22linktype%22%3A%22text%22%2C%22wasblank%22%3Afalse%2C%22wikitext%22%3A%22%5Bhttp%3A%5C%2F%5C%2Fwww.babwani-congruence.blogspot.in%5C%2F%20An%20extended%20approach%20to%20the%20Julian%20and%20the%20Gregorian%20calendar%5D%22%7D" data-rte-instance="2412-10451151815f21cf58075c9" rel="nofollow" class="external text" href="<a rel="nofollow" class="external free" href="http://www.babwani-congruence.blogspot.in/">http://www.babwani-congruence.blogspot.in/</a>">An extended approach to the Julian and the Gregorian calendar</a>" for a lot of details to do various calculations.
<p />
<img data-rte-meta="%7B%22type%22%3A%22comment%22%2C%22wikitext%22%3A%22%3C%21--%20Saved%20in%20parser%20cache%20with%20key%20calendars%3Arte-parser-cache%3A1942%20--%3E%22%2C%22placeholder%22%3A1%7D" data-rte-instance="2412-9798810595f21d39425d29" class="placeholder placeholder-comment" src="data:image/gif;base64,R0lGODlhAQABAIABAAAAAP///yH5BAEAAAEALAAAAAABAAEAQAICTAEAOw%3D%3D" type="comment" />
Dominical letters[]
The system of dominical letters assigns a letter from A through G to each day of the year. In a leap year, February 24, the bissextile day, does not have a distinct letter. This causes all subsequent Sundays to be associated with a different dominical letter than those in the beginning of the year, so all leap years get two dominical letters. In this system, the "dominical letter" for a year is the letter which corresponds to the Sundays of that year.
See also[]
- ISO 8601
- Doomsday algorithm
- Zeller's congruence
- Perpetual calendar
- Julian day#Calculation
- Perpetual Calendar of 800 Years
External links[]
- Compact formula for memorization, also for the Julian Calendar
- Another formula and when countries changed from the Julian Calendar
- ↑ www.tondering.dk/claus/cal/chrweek.php#calcdow