Algoritme for å bestemme ukedag

For å regne ut på hvilken ukedag en bestemt dato falt i fortid eller vil falle i fremtiden, kan man bruke ulike algoritmer. Alternativt kan man benytte evighetskalendere, som ikke krever noen beregninger fra brukerens side. Typisk kan man ønske å fastslå på hvilken ukedag noen ble født eller på hvilken ukedag en spesifikk historisk begivenhet fant sted.

Innføring 
For å bestemme ukedagen til en dato fra numeriske beregninger, starter man ved å tildele hver av de syv ukedagene (søndag, mandag, … lørdag) et tall, i rekkefølge. Vanligvis brukes 0 til 6, som tilsvarer ISO 8601s  alternative bruk av 1 = mandag til 7 = søndag. Dette oppnås ved aritmetikk modulo 7. Modulo 7 er en operasjon som beregner resten av et tall når det deles med 7, for eksempel er 10 modulo 7 lik 3. Da behandles tallet 7 som null, tallet 8 som 1, tallet 9 som 2, osv. Dette tolkes slik at om søndag representeres som 0, så er 7 dager senere også en søndag, 8 dager senere er en mandag, osv.

Utgangspunktet for så godt som alle disse metodene er å starte med en gitt historisk dato hvor ukedagen er kjent, for eksempel ta utgangspunkt i at 1. januar 1800 var en onsdag. Deretter regner man ut hvor mange dager det er mellom den datoen og datoen man ønsker å finne ukedagen til. Til slutt bruker man modulær aritmetikk 7 for å fastslå på hvilken ukedag den aktuelle datoen falt eller vil falle.

En standardmetode er å slå opp numerisk verdi for første ukedag i et gitt århundre, slå opp (eller beregne, ved en kongruensmetode) en månedkorreksjon, beregne antall skuddår siden starten av århundret, endelig legge disse sammen med antall år siden århundrets begynnelse. Til slutt finner man antall forløpte dager og bruker modulo 7 for å bestemme ukedagen.

Man kan enten summere først og finne resten (ved deling med 7) til slutt eller finne resten ved hvert trinn, som i Lewis Carrolls metode. Begge metodene er praktiske, den første metoden er enklere for elektroniske kalkulatorer og dataprogrammer, mens den siste kan være bedre egnet for hoderegning. Ingen av metodene gitt her sjekker inngangsdata, så hvis en starter med ufornuftige datoer vil det gi feil svar.

Nyttige begrep

Samsvarende måneder 
«Samsvarende måneder» er de månedene innenfor samme kalenderår som starter på samme ukedag. For eksempel er det samsvar mellom september og desember, fordi 1. september faller på samme ukedag som 1. desember. Måneder kan bare samsvare hvis antallet dager mellom deres førstedager er delelig med 7, med andre ord, om det er et helt antall uker mellom deres førstedager. For eksempel februar samsvarer med mars (unntatt skuddår) fordi februar har 28 dager, som er nøyaktig fire uker. I et skuddår vil januar og februar ha andre samsvarsmåneder enn i et vanlig år, siden 29. februar betyr at alle senere måneder starter en dag senere.

Månedene samsvarer slik:
For vanlige år:
 januar og oktober.
 februar, mars og november.
 april og juli.
 Ingen måneder samsvarer med august.
For skuddår:
 januar, april og juli.
 februar og august.
 mars og november.
 Ingen måneder samsvarer med oktober.
For alle årene:

 september og desember.
 Ingen måneder samsvarer med mai eller juni.
I månedtabellen under, så har samsvarende måneder det samme tallet, et faktum som følger direkte fra definisjonen.

Samsvarende år 

Det er syv mulige forskjellige ukedager et år kan starte, og skuddår vil endre ukedagen for alle dager etter 29. februar.  Dette betyr at et år kan ha 14 forskjellige konfigurasjoner (med andre ord, det er 14 forskjellige mulige årskalendere). For eksempel, 2011 er et normalår som begynner på en lørdag, som betyr at 2011 samsvarer med kalenderåret 2005. Men 2012 er et skuddår som starter på en søndag, som betyr at de første to månedene det året starter på samme dag som de gjør i 2006 (1. januar er en søndag, mens 1. februar er en onsdag), men på grunn av skuddår, så samsvarer de ti siste månedene det året med de ti siste månedene av 2007.

En tabellmetode for å beregne ukedag

Grunnleggende metode for hoderegning 
Denne metoden er gyldig både for den den gregorianske kalenderen  og for den julianske kalenderen. Storbritannia med sine kolonier begynte å bruke den gregorianske kalenderen på torsdag 14. september 1752, dagen før denne var onsdag, 2. september 1752 (Old Style).  De områdene som nå utgjør USA begynte å bruke den nye kalenderen på forskjellige tidspunkt, avhengig av hvilken kolonimakt de lå under: Spania og Frankrike hadde brukt den nye kalenderen siden 1582, mens Russland stadig brukte den julianske kalenderen da Alaska ble kjøpt fra dem i 1867.

Formelen er , hvor:
 d er dag i måneden,
 m er månedens tall i månedstabellen,
 y er de to siste siffrene i årstallet, og
 c er århundretallet. For en gregoriansk dato så er dette 6 hvis de første to sifrene i årstallet er delelig med fire og etterfølgende århundrer er 4-2-0 (så århundretallene for 2000, 2100, 2200, og 2300 er respektive 6, 4, 2 og 0).  For en juliansk dato, så er dette 6 for 1200 og etterfølgende århundrer trekker man fra 1 inntil 0, så er neste århundre 6 igjen (så 1300 er 5 og 1100 er 0).

Hvis resultatet er 0, så var datoen en søndag, hvis 1, en mandag, osv.

Dagstabell

Månedstabell

Årstabell

Århundrestabell

Fullstendig tabell 

For å bestemme ukedag (1. januar 2000, lørdag)
dag i måneden: 1 ~ 31 (1)
måneden: 1 for januar ~ 12 for desember (1，man) 
året: 00 ~ 99 mod 28 og kursiv for januar eller februar i skuddår (00 ~ man)
århundre mod 4 for den gregorianske kalenderen og mod 7 for den julianske kalenderen (20 or 0 ~ lør).
For å bestemme søndagsbokstaven til et årstall: (2100 C ~ 2199 F)
the century column: from the century row to Sun which is in the column and in the row (21 or 1)
the dominical letter: Mon for A ~ Sun for G from the year row to the century column (00 ~ Wed for C, 15 for 99 ~ Sat for F).

For den gregorianske datoen 1. januar 2000 (et skuddår):
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 den julianske datoen 13. oktober 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' algoritme

Formler utledet fra Gauss' algoritme

Andre varianter

Andre, rent matematiske algoritmer 

  Zellers algoritme

 Kraitchiks algoritme

 Schwerdtfegers variant

 Tønderings algoritme
 
 Dinhs algoritme

Andre metoder (som bruker tabeller eller lignende)

Lewis Carrolls metode

Implementasjons-avhengige metoder av Sakamoto, Lachman, Keith og Craver

Babwanis metode

Se også
 Ukenummer: Enkel utregning av ukesnummer
 Ukedager: Enkel utregning av ukedag
 ISO 8601
 Søndagsbokstav
 Påskeformelen
 Solsyklus
 Gyldentall

Referanser

Litteratur

Eksterne lenker 
 Compact tabular method for memorization, also for the Julian calendar
 An algorithm for both Gregorian and Julian calendars
 When countries changed from the Julian calendar
 World records for mentally calculating the day of the week in the Gregorian calendar 
 A recent reworking of the method of Keith & Craver eliminating the need to recall a value for each year.
 A trainer for mental calculation of the day of the week

Kalendere