Jump to content

Determination of the day of the week: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
→‎All in one table: changed numbers to weekdays.
2006 is date of republishing; book originally came out in 1942
Line 217: Line 217:
where {{math|''R(y,m)''}} is the [[remainder]] after division of {{math|''y''}} by {{math|''m''}},<ref name=Schwerdtfeger/> or {{math|''y''}} modulo {{math|''m''}}.
where {{math|''R(y,m)''}} is the [[remainder]] after division of {{math|''y''}} by {{math|''m''}},<ref name=Schwerdtfeger/> or {{math|''y''}} modulo {{math|''m''}}.


This formula was also converted into tabular methods for calculating any day of the week by Kraitchik and Schwerdtfeger.<ref name=Kraitchik>{{cite book|last=Kraitchik|first=Maurice|chapter=Chapter five: The calendar |title=Mathematical recreations|year=2006|publisher=Dover Publications|location=Mineola|isbn=9780486453583|edition=2nd rev. [Dover] |pages=109&ndash;116}}</ref><ref name=Schwerdtfeger/>
This formula was also converted into tabular methods for calculating any day of the week by Kraitchik and Schwerdtfeger.<ref name=Kraitchik>{{cite book|last=Kraitchik|first=Maurice|chapter=Chapter five: The calendar |title=Mathematical recreations|year=1942|publisher=Dover Publications|location=Mineola|isbn=9780486453583|edition=2nd rev. [Dover] |pages=109&ndash;116}}</ref><ref name=Schwerdtfeger/>


===Formulas derived from Gauss's algorithm===
===Formulas derived from Gauss's algorithm===

Revision as of 19:58, 16 January 2013

There are various methods to calculate the day of the week for any particular date in the past or future. These methods ultimately rely on algorithms to determine the day of the week for any given date, including those based solely on tables as found in perpetual calendars that require no calculations to be performed by the user. A typical application is to calculate the day of the week on which someone was born or any other specific event occurred.

Introduction

To determine the day of the week from numerical operations, Sunday to Saturday is represented as numbers (usually from 0 to 6, respectively, which is equivalent to ISO 8601's alternative usage of 1 = Monday to 7 = Sunday). This is achieved with arithmetic modulo 7. Modulo 7 is an operation that calculates the remainder of a number being divided by 7. Thus the number 7 is treated as 0, 8 as 1, 9 as 2, 18 as 4 and so on; the interpretation of this being that if Sunday is signified 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.

The basic approach of nearly all of the methods to calculate the day of the week begins by starting from a known pair (such as January 1, 1800 as a Wednesday), determining the number of days between the known day and the day that you are trying to determine, and using arithmetic modulo 7 to find a new numerical day of the week.

One standard approach is to look up (or calculate, using a known rule) the value of the first day of the week of a given century, look up (or calculate, using a method of congruence) an adjustment for the month, calculate the number of leap years since the start of the century, and then add these together along with the number of years since the start of the century, and the day number of the month. Eventually, one ends up with a day-count on which one applies modulo 7 to determine the day of the week of the date.[1]

Some methods do all the additions first and then cast out sevens, whereas others cast them out at each step, as in Lewis Carroll's method. Either way is quite viable: the former is easier for calculators and computer programs; the latter for mental calculation (it is quite possible to do all the calculations in one's head with a little practice). None of the methods given here perform range checks, so that unreasonable dates will produce erroneous results.

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.

The months correspond thus:
For common years:

  • January and October.
  • February, March and November.
  • April and July.
  • No month corresponds to August.

For leap year:

  • January, April and July.
  • February and August.
  • March and November.
  • No month corresponds to October.

For all years:

  • September and December.
  • No month corresponds to May or June.

In the months table below, corresponding months have the same number, a fact which follows directly from the definition.

Corresponding years

There are seven 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 can be referenced by a Dominical letter. For example, 2011 is a common year starting on Saturday, meaning that 2011 corresponds to the 2005 calendar year. 2012, on the other hand, is a leap year starting on Sunday, meaning that the first two months of the year begin on the same day as they do in 2006 (i.e. January 1 is a Sunday and February 1 is a Wednesday) but because of leap day the last ten months correspond to the last ten months in 2007 (i.e. March 1 is a Thursday, etc.).

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 29, 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.

A tabular method to calculate the day of the week

Basic method

This method is valid for both the Gregorian calendar and the Julian calendar. Britain and its colonies started using the Gregorian calendar on Thursday, September 14, 1752 (the previous day was Wednesday, September 2, 1752 (Old Style). The areas now forming the United States adopted the calendar at different times depending on the colonial power: Spain and France had been using it since 1582, while Russia was still using the Julian calendar when Alaska was purchased from it in 1867.

The formula is , where:

  • d is the day of the month (or look up the days table),
  • m is the month's number in the months table,
  • y is the last two digits of the year (or look up the years table), and
  • c is the century number (or look up the centuries table). For a Gregorian date, this is 6 if the first two digits of the year are evenly divisible by 4, and subsequent centuries are 4-2-0 (so the century numbers for 2000, 2100, 2200, and 2300 are respectively 6, 4, 2, and 0). For a Julian date, this is 6 for 1200, and subsequent centuries subtract 1 until 0, when the next century is 6 (so 1300 is 5, and 1100 is 0).

If the result is 0, the date was a Sunday; if 1 it was a Monday, and so on through the week until 6 = Saturday.

Days table

Date d Day
01 08 15 22 29 1 Monday
02 09 16 23 30 2 Tuesday
03 10 17 24 31 3 Wednesday
04 11 18 25 4 Thursday
05 12 19 26 5 Friday
06 13 20 27 6 Saturday
07 14 21 28 0 Sunday

Months table

Month m Leap years
January 0 -1
February 3 2
March 3
April 6
May 1
June 4
July 6
August 2
September 5
October 0
November 3
December 5

Years table

The year modulo 100 y
00 06 17 23 28 34 45 51 56 62 73 79 84 90 0
01 07 12 18 29 35 40 46 57 63 68 74 85 91 96 1
02 13 19 24 30 41 47 52 58 69 75 80 86 97 2
03 08 14 25 31 36 42 53 59 64 70 81 87 92 98 3
09 15 20 26 37 43 48 54 65 71 76 82 93 99 4
04 10 21 27 32 38 49 55 60 66 77 83 88 94 5
05 11 16 22 33 39 44 50 61 67 72 78 89 95 6

Centuries table

Gregorian calendar Julian calendar
Century mod 4 Century mod 7 c
(1700, 2100) 1 (1400, 0700) 0 4
(1500, 0800) 1 3
(1800, 2200) 2 (1600, 0900) 2 2
(1700, 1000) 3 1
(1900, 2300) 3 (1800, 1100) 4 0
(2000, 2400) 0 (1200, 0500) 5 6
(1300, 0600) 6 5

All in one table

Date 01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Month 29 30 31 Year modulo 28 Century mod 4 Century mod 7
4 07 Sun Mon Tue Wed Thu Fri Sat 01 07 12 18 24 16000 2000 0 0500 01200 5
9 012 Sat Sun Mon Tue Wed Thu Fri 02 08 13 19 24 0600 01300 6
6 Fri Sat Sun Mon Tue Wed Thu 03 08 14 20 25 1700 02100 1 0700 01400 0
20 3 011 Thu Fri Sat Sun Mon Tue Wed 04 09 15 20 26 08000 1500 1
8 Wed Thu Fri Sat Sun Mon Tue 04 10 16 21 27 1800 02200 2 0900 00200 2
5 Tue Wed Thu Fri Sat Sun Mon 05 11 16 22 00 10000 0300 3
10 10 Mon Tue Wed Thu Fri Sat Sun 06 12 17 23 00 1900 02300 3 1100 00400 4
  • The day of the month: 1 ~ 31
  • The month: 1 for January ~ 12 for December
  • The year: 00 ~ 99 mod 28 and italic for January or February in leap years
  • The century mod 4 for the Gregorian calendar and mod 7 for the Julian calendar

Examples

For the Gregorian date of January 1, 2000 (a leap year):

  • The day of the month: 1
  • January in the months table: 6
  • Last two digits of year (divided by 4): 0
  • Century number: 6

The result is 13, leaving a remainder of 6 when divided by 7, so January 1, 2000 was a Saturday.

For the Julian date of October 13, 1307:

  • The day of the month: 13
  • October in the months table: 0
  • Last two digits of year divided by 4: 1
  • Last two digits of year: 7
  • Century number: 5

The result is 26, leaving a remainder of 5 when divided by 7, so October 13, 1307 was a Friday.

Gauss's algorithm

In a handwritten note in a collection of astronomical tables, Carl Friedrich Gauss described a method for calculating the day of the week for the first of January in any given year.[2] He never published it. It was finally included in his collected works in 1927.[3]

Gauss's method was applicable to the Gregorian calendar. He numbered the weekdays from 0 to 6 starting with Sunday. He defined the following operation: The weekday of the first of January in year number A is[2]

where R(y,m) is the remainder after division of y by m,[3] or y modulo m.

This formula was also converted into tabular methods for calculating any day of the week by Kraitchik and Schwerdtfeger.[4][3]

Formulas derived from Gauss's algorithm

The Gauss formula for January 1 can be converted into methods for calculating the day of the week for any given date as follows.

  • For the Gregorian calendar
Let A - 1 = year = Y, m = month - 2 mod 12 (March = 1,..., January = -1 mod 12 = 11 and February = 12) and d = days of the month, this formula becomes
Let A - 1 = year = y + 100c, this formula becomes
  • For the Julian calendar
  • Note: year - 1 for January and February.
For January 1, 2000, the date would be treated as the 11th month of 1999,
d = 1
[2.6 × 11 - 0.2] = 28 mod 7 = 0
5R(99,4) = 5 × 3 = 15 mod 7 = 1
4R(1999,100) = 4 × 99 mod 7 = 4 × 1 = 4
6R(1999,400) = 6 × 399 mod 7 = 6 × 0 = 0
3R(99,7) = 3 × 1 = 3
5R(19,4) = 5 × 3 mod 7 = 1
w = 1 + 0 + 1 + 4 + 0 = 1 + 0 + 1 + 3 + 1 = 6 = Saturday.
For December 31, 2000, the date would be treated as the 10th month of the year,
d = 31 mod 7 = 3
[2.6 × 10 - 0.2] = 25 mod 7 = 4
5R(00,4) = 5 × 0 = 0
4R(2000,100) = 4 × 0 = 0
6R(2000,400) = 6 × 0 = 0
3R(00,7) = 3 × 0 = 0
5R(20,4) = 5 × 0 = 0
w = 3 + 4 + 0 + 0 + 0 = 3 + 4 + 0 + 0 + 0 = 7 mod 7 = 0 = Sunday.
For April 30, 1777, the date would be treated as the second month of the year,
d = 30 mod 7 = 2
[2.6 × 2 - 0.2] = 5
5R(77,4) = 5 × 1 = 5
4R(1777,100) = 4 × 77 mod 7 = 0
6R(1777,400) = 6 × 177 mod 7 = 6 × 2 mod 7 = 5
3R(77,7) = 3 × 0 = 0
5R(17,4) = 5 × 1 = 5
w = 2 + 5 + 5 + 0 + 5 = 17 mod 7 = 3 = Wednesday.
For October 4, 1582, the date would be treated as the 8th month of the year,
d = 4
[2.6 × 8 – 2.2] = 4
5R(82,4) = 5 × 2 mod 7 = 3
3R(1582, 700) = 3 × 182 mod 7 = 3 × 0 = 0
3R(82,7) = 3 × 5 mod 7 = 1
6R(15,7) = 6 × 1 = 6
w = 4 + 4 + 3 + 0 mod 7 = 4 + 4 + 3 + 1 + 6 mod 7 = 4 = Thursday.
For January 1, 00 (BC 1), the date would be treated as the 11th month of the previous year,
d = 1
[2.6 × 11 – 2.2] = 5
5R(-1,4) = 5 × 3 mod 7 = 1
3R(-1,700) = 3 × 699 mod 7 = 3 × 6 mod 7 = 4
3R(-1,7) = 3 × 6 mod 7 = 4
6R(0,7) = 6 × 0 = 0
w = 1 + 5 + 1 + 4 mod 7 = 1 + 5 + 1 + 4 + 0 mod 7 = 4 = Thursday.

Kraitchik's algorithm

Kraitchik proposed two methods for calculating the day of the week.[4] One is a graphical method. The other uses the formula

where w is the day of the week (counting upwards from 1 on Sunday instead of 0 in Gauss's version); and m, c and y are numbers depending on the month, day and year as in the following tables:

Month 1 2 3 4 5 6 7 8 9 10 11 12
m 1 4 3 6 1 4 6 2 5 0 3 5

For the Gregorian calendar,

[Year/100] mod 4 0 1 2 3
c 0 5 3 1

For the Julian calendar,

[Year/100] mod 7 0 1 2 3 4 5 6
c 5 4 3 2 1 0 6

Finally, the year number is obtained from this table:

Last two digits of the year y
00 06 17 23 28 34 45 51 56 62 73 79 84 90 0
01 07 12 18 29 35 40 46 57 63 68 74 85 91 96 1
02 13 19 24 30 41 47 52 58 69 75 80 86 97 2
03 08 14 25 31 36 42 53 59 64 70 81 87 92 98 3
09 15 20 26 37 43 48 54 65 71 76 82 93 99 4
04 10 21 27 32 38 49 55 60 66 77 83 88 94 5
05 11 16 22 33 39 44 50 61 67 72 78 89 95 6

Schwerdtfeger's variation

In the version by Schwerdtfeger, the year is split into the century and the two digit year within the century. The approach depends on the month. For m ≥ 3,

so g is between 0 and 99. For m = 1,2,

The formula for the day of the week is[3]

where the positive modulus is chosen.[3]

The value of e is obtained from the following table:

m 1 2 3 4 5 6 7 8 9 10 11 12
e 0 3 2 5 0 3 5 1 4 6 2 4

The value of f is obtained from the following table, which depends on the calendar. For the Gregorian calendar,[3]

c mod 4 0 1 2 3
f 0 5 3 1

For the Julian calendar,[3]

c mod 7 0 1 2 3 4 5 6
f 5 4 3 2 1 0 6

Other variations

Another variation of the above algorithm works with fewer lookup tables. A slight disadvantage is the unusual month and year counting convention. The formula is

where

Y is the year minus 1 for  January or February, and the year for  the rest of the year
y is the last 2 digits of Y
c is the first 2 digits of Y
d is the day of the month (1 to 31)
m is the shifted month (March=1,...February=12)
w is the day of week (0=Sunday,..6=Saturday)

For example, January 1, 2000.(year-1 for January)

Note: The first is only for a 00 leap year and the second is for any 00 years.

The term [2.6m - 0.2] mod 7 gives the values of months: m

Months                m
January               0
February              3 
March                 2
April                 5
May                   0
June                  3
July                  5
August                1
September             4
October               6
November              2
December              4

The term y + [y/4] mod 7 gives the values of years: y

Y mod 28              y
01 07 12 18 --        1
02 -– 13 19 24        2
03 08 14 –- 25        3
-- 09 15 20 26        4
04 10 –- 21 27        5
05 11 16 22 –-        6
06 -– 17 23 00        0

The term [c/4] - 2c mod 7 gives the values of centuries: c

C mod 4               c   
1                     5
2                     3
3                     1
0                     0

Now from the general formula: ; January 1, 2000 can be recalculated as follows:

  • , d = 1, m = 0, y = 5 (0 - 1 mod 28 = 27), c = 0 (20 mod 4 = 0)
  • , d = 1, m = 0, y = 4 (99 mod 28 = 15), c = 1 (20 - 1 mod 4 = 3)

Other purely mathematical algorithms

Zeller’s algorithm

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.[5] The formula for the Gregorian calendar is

where

Y is the year minus 1 for  January or February, and the year for  the rest of the year
y is the last 2 digits of Y
c is the first 2 digits of Y
d is the day of the month (1 to 31)
m is the shifted month (March=3,...February=14)
w is the day of week (1=Sunday,..0=Saturday)

The only difference is one between Zeller’s algorithm (Z) and Gaussian algorithm (G), that is Z - G = 1 = Sunday.

(March=3 in Z but March=1 in G)


So we can get the values of months from those for Gaussian algorithm by adding one:

Months                m
January               1
February              4 
March                 3
April                 6
May                   1
June                  4
July                  6
August                2
September             5
October               0
November              3
December              5

Tøndering's algorithm

Claus Tøndering'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.[6]

Other methods (using tables or computational devices)

Lewis Carroll's method

Charles Lutwidge Dodgson (Lewis Carroll) devised a method resembling a puzzle, yet partly the same as the tabular method given above: he lists the same three adjustments for the first three months, one 7 higher for the last, and gives cryptic instructions for finding the rest; his adjustments for centuries are to be determined using formulas identical to those for the centuries table. Although claiming to use a modification for Old Style dates, the one he uses to determine that "1676, February 23" is a Wednesday, only works on the New Style Julian calendar.[7][8]

Implementation-dependent methods of Sakamoto, Lachman, Keith and Craver

In the C language expressions below, y, m and d are, respectively, integer variables representing the year (e.g., 1988), month (1-12) and day of the month (1-31).

       (d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7  

In 1990, Michael Keith and Tom Craver published the foregoing expression that seeks to minimise the number of keystrokes needed to enter a self-contained function for converting a Gregorian date into a numerical day of the week.[9] It preserves neither y nor d, and returns 0 = Sunday, 1 = Monday, etc.

Shortly afterwards, Hans Lachman streamlined their algorithm for ease of use on low-end devices. As designed originally for four-function calculators, his method needs fewer keypad entries by limiting its range either to A.D. 1905-2099, or to historical Julian dates. It was later modified to convert any Gregorian date, even on an abacus. On Motorola 68000-based devices, there is similarly less need of either processor registers or opcodes.

The tabular forerunner to Tøndering's algorithm is embodied in the following ANSI C function. With minor changes, it is adaptable to other high level programming languages such as APL2. (A 6502 assembly language version exists as well.)  Devised by Tomohiko Sakamoto in 1993, it is accurate for any Gregorian date:

   int dow(int y, int m, int d)
   {
       static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
       y -= m < 3;
       return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
   }

The function does not always preserve y, and returns 0 = Sunday, 1 = Monday, etc.

Babwani's method

Sohael Babwani developed an alternative method that enables one not only to find the day of the week but also a date, when the day, month and year are given.[10] It uses a months table in a manner identical to the one above, and numbers months normally from 1 for January to 12 for December.[11]

See also

References

  1. ^ Richards, E.G. (1999). Mapping Time: The Calendar and Its History. Oxford University Press.
  2. ^ a b Gauss, Carl F. (1981). "Den Wochentag des 1. Januar eines Jahres zu finden. Güldene Zahl. Epakte. Ostergrenze.". Werke. herausgegeben von der Königlichen Gesellschaft der Wissenschaften zu Göttingen (2. Nachdruckaufl. ed.). Hildesheim: Georg Olms Verlag. pp. 206–207. ISBN 9783487046433.
  3. ^ a b c d e f g Schwerdtfeger, Berndt E. (May 7 2010). "Gauss' calendar formula for the day of the week" (pdf) (1.4.26 ed.). Retrieved 23 December 2012. {{cite web}}: Check date values in: |date= (help)
  4. ^ a b Kraitchik, Maurice (1942). "Chapter five: The calendar". Mathematical recreations (2nd rev. [Dover] ed.). Mineola: Dover Publications. pp. 109–116. ISBN 9780486453583.
  5. ^ J. R. Stockton (19 March 2010). "The Calendrical Works of Rektor Chr. Zeller : The Day-of-Week and Easter Formulae". Merlyn. Retrieved 19 December 2012.
  6. ^ Tondering, Claus. "What day of the week was 2 August 1953?". The Calendar FAQ. Retrieved 19 December 2012.
  7. ^ Lewis Carroll, "To Find the Day of the Week for Any Given Date", Nature, March 31, 1887.
  8. ^ Martin Gardner, "The Universe in a Handkerchief: Lewis Carroll's Mathematical Recreations, Games, Puzzles, and Word Plays", pages 24-26, Springer-Verlag, 1996
  9. ^ Michael Keith and Tom Craver. (1990). The ultimate perpetual calendar?, Journal of Recreational Mathematics, 22:4, pp.280-282.
  10. ^ Sohael Babwani (2004). An extended approach to the Julian and the Gregorian calendar, The Mathematical Gazette, 88:77, pp. 569–573.
  11. ^ Calculating the day of the week and much more: Frequently Asked Questions
  • Gauss, Carl F. (1981). "Den Wochentag des 1. Januar eines Jahres zu finden. Güldene Zahl. Epakte. Ostergrenze.". Werke. herausgegeben von der Königlichen Gesellschaft der Wissenschaften zu Göttingen (2. Nachdruckaufl. ed.). Hildesheim: Georg Olms Verlag. pp. 206–207. ISBN 9783487046433.
  • Hale-Evans, Ron (2006). "Hack #43: Calculate any weekday". Mind performance hacks (1st ed.). Beijing: O'Reilly. pp. 164–169. ISBN 9780596101534.
  • Thioux, Marc (2006). "The day of the week when you were born in 700 ms: Calendar computation in an autistic savant". Journal of Experimental Psychology: Human Perception and Performance. 32 (5): 1155–1168. doi:10.1037/0096-1523.32.5.1155. {{cite journal}}: Unknown parameter |coauthors= ignored (|author= suggested) (help)
  • Treffert, Darold A. "Why calendar calculating?". Islands of genius : the bountiful mind of the autistic, acquired, and sudden savant (1. publ., [repr.]. ed.). London: Jessica Kingsley. pp. 63–66. ISBN 9781849058735.