# Eeuwigdurende kalender

Een eeuwigdurende kalender (Latijn: calendarium perpetuum) is een tabel of verzameling tabellen waarmee men in ieder geval de weekdag kan bestemmen van alle data binnen een bepaald kalendersysteem. Het primaire doel is om te allen tijde te kunnen bepalen op welke weekdag een bepaalde datum viel in het verleden of in de toekomst.

## Geschiedenis

Vanaf de Middeleeuwen tot ongeveer de jaren dertig van de twintigste eeuw waren kalenders zo kostbaar dat veel mensen slechts wilden investeren in een eeuwigdurende kalender. Kalenders bleven geruime tijd na de uitvinding van de boekdrukkunst duur, omdat het zetten van tabellen hoge eisen stelt aan de expertise van de drukker. Van zo’n kalender verwachtte men in de eerste plaats overzicht. De eeuwigdurende kalenders die in agenda’s worden afgedrukt zijn functioneel in het bestemmen van een enkele datum in het verre verleden of de verre toekomst, maar voor het alledaagse gebruik zijn ze minder geschikt. Overigens zijn deze pas uitgevonden in het begin van de twintigste eeuw.
Een eeuwigdurende kalender die de Gregoriaanse kalender volgt, herhaalt zichzelf elke 400 jaar, aangezien 303 gewone jaren en 97 schrikkeljaren samen optellen tot 146.097 dagen, wat precies 20.871 weken zijn.

## Bepaling met behulp van zondagsletters

De hieronder staande tabel is ‘modern’ in de zin dat de dagen zijn gegeven in rijtjes van zeven, in plaats van een doorlopende lijst per maand. (Vanaf het eind van de 19de eeuw). Zij is ‘traditioneel’ in de zin dat ze gebruikmaakt van de zondagsletters. Om er gebruik van te kunnen maken moet men eerst de zondagsletter van het jaar weten of opzoeken, bijvoorbeeld in een zondagsletterstabel. De zondagsletter geeft aan welke van de zeven letters A tot en met G opgevat dient te worden als een zondag.

### Voorbeeld in een gewoon jaar

Op welke weekdag valt 6 juni 2007 ?
De zondagsletter van 2007 is G. Daarmee zijn alle dagen van 2007 die op een G-regel staan zondagen. Daarmee worden in dat jaar alle A-dagen maandagen, alle B-dagen dinsdagen, en alle C-dagen woensdagen. We zien dat 6 juni op een C-regel staat. Het antwoord is dus woensdag.

### Voorbeeld in een schrikkeljaar

Op welke weekdag valt 28 februari 2008 ?
De zondagsletter van 2008 is FE. Omdat ‘de zondagsletter’ uit twee letters bestaat weten we meteen dat 2008 een schrikkeljaar is — als we dat nog niet wisten. Voor de maanden januari en februari maken we gebruik van de eerste letter, voor alle overige maanden van de tweede letter.
Voor 28 februari maken we dus gebruik van de eerste letter, de F. F staat voor zondag, G voor maandag, A voor dinsdag, B voor woensdag, C voor donderdag. 28 februari staat op een C-regel, het antwoord is dus donderdag.

#### Voorbeeld

Op welke weekdag valt 1 maart 2008 ?
Zondagsletter van 2008 is FE, voor maart gebruiken we de tweede letter, de E. De E is een zondag, dan is de voorafgaande dag, de D, een zaterdag.
In 2008 wordt donderdag 28 februari gevolgd door de schrikkeldag vrijdag 29 februari, die gevolgd wordt door zaterdag 1 maart.

#### Hulptabel

In plaats van maximaal drie dagen voor- of achteruit te tellen kan men ook gebruikmaken van de hulptabel, onderaan.
| ZL | Januari | Januari | Januari | | | | | Februari | Februari | Februari | | | | Maart | Maart | Maart | | | ZL |
| A | | 1 | 8 | 15 | 22 | 29 | | | 5 | 12 | 19 | 26 | | | 5 | 12 | 19 | 26 | A |
| B | | 2 | 9 | 16 | 23 | 30 | | | 6 | 13 | 20 | 27 | | | 6 | 13 | 20 | 27 | B |
| C | | 3 | 10 | 17 | 24 | 31 | | | 7 | 14 | 21 | 28 | | | 7 | 14 | 21 | 28 | C |
| D | | 4 | 11 | 18 | 25 | | | 1 | 8 | 15 | 22 | 29 | | 1 | 8 | 15 | 22 | 29 | D |
| E | | 5 | 12 | 19 | 26 | | | 2 | 9 | 16 | 23 | | | 2 | 9 | 16 | 23 | 30 | E |
| F | | 6 | 13 | 20 | 27 | | | 3 | 10 | 17 | 24 | | | 3 | 10 | 17 | 24 | 31 | F |
| G | | 7 | 14 | 21 | 28 | | | 4 | 11 | 18 | 25 | | | 4 | 11 | 18 | 25 | | G |
| | April | April | April | | | | | Mei | Mei | Mei | | | | Juni | | | | | |
| A | | 2 | 9 | 16 | 23 | 30 | | | 7 | 14 | 21 | 28 | | | 4 | 11 | 18 | 25 | A |
| B | | 3 | 10 | 17 | 24 | | | 1 | 8 | 15 | 22 | 29 | | | 5 | 12 | 19 | 26 | B |
| C | | 4 | 11 | 18 | 25 | | | 2 | 9 | 16 | 23 | 30 | | | 6 | 13 | 20 | 27 | C |
| D | | 5 | 12 | 19 | 26 | | | 3 | 10 | 17 | 24 | 31 | | | 7 | 14 | 21 | 28 | D |
| E | | 6 | 13 | 20 | 27 | | | 4 | 11 | 18 | 25 | | | 1 | 8 | 15 | 22 | 29 | E |
| F | | 7 | 14 | 21 | 28 | | | 5 | 12 | 19 | 26 | | | 2 | 9 | 16 | 23 | 30 | F |
| G | 1 | 8 | 15 | 22 | 29 | | | 6 | 13 | 20 | 27 | | | 3 | 10 | 17 | 24 | | G |
| | Juli | Juli | Juli | | | | | Augustus | Augustus | Augustus | | | | September | September | September | | | |
| A | | 2 | 9 | 16 | 23 | 30 | | | 6 | 13 | 20 | 27 | | | 3 | 10 | 17 | 24 | A |
| B | | 3 | 10 | 17 | 24 | 31 | | | 7 | 14 | 21 | 28 | | | 4 | 11 | 18 | 25 | B |
| C | | 4 | 11 | 18 | 25 | | | 1 | 8 | 15 | 22 | 29 | | | 5 | 12 | 19 | 26 | C |
| D | | 5 | 12 | 19 | 26 | | | 2 | 9 | 16 | 23 | 30 | | | 6 | 13 | 20 | 27 | D |
| E | | 6 | 13 | 20 | 27 | | | 3 | 10 | 17 | 24 | 31 | | | 7 | 14 | 21 | 28 | E |
| F | | 7 | 14 | 21 | 28 | | | 4 | 11 | 18 | 25 | | | 1 | 8 | 15 | 22 | 29 | F |
| G | 1 | 8 | 15 | 22 | 29 | | | 5 | 12 | 19 | 26 | | | 2 | 9 | 16 | 23 | 30 | G |
| | Oktober | Oktober | Oktober | | | | | November | November | November | | | | December | December | December | | | |
| A | 1 | 8 | 15 | 22 | 29 | | | 5 | 12 | 19 | 26 | | | 3 | 10 | 17 | 24 | 31 | A |
| B | 2 | 9 | 16 | 23 | 30 | | | 6 | 13 | 20 | 27 | | | 4 | 11 | 18 | 25 | | B |
| C | 3 | 10 | 17 | 24 | 31 | | | 7 | 14 | 21 | 28 | | | 5 | 12 | 19 | 26 | | C |
| D | 4 | 11 | 18 | 25 | | | 1 | 8 | 15 | 22 | 29 | | | 6 | 13 | 20 | 27 | | D |
| E | 5 | 12 | 19 | 26 | | | 2 | 9 | 16 | 23 | 30 | | | 7 | 14 | 21 | 28 | | E |
| F | 6 | 13 | 20 | 27 | | | 3 | 10 | 17 | 24 | | | 1 | 8 | 15 | 22 | 29 | | F |
| G | 7 | 14 | 21 | 28 | | | 4 | 11 | 18 | 25 | | | 2 | 9 | 16 | 23 | 30 | | G |

##### Hulptabel

| zondag | A | B | C | D | E | F | G |
| maandag | B | C | D | E | F | G | A |
| dinsdag | C | D | E | F | G | A | B |
| woensdag | D | E | F | G | A | B | C |
| donderdag | E | F | G | A | B | C | D |
| vrijdag | F | G | A | B | C | D | E |
| zaterdag | G | A | B | C | D | E | F |
De constructie van beide tabellen is eenvoudig. Voor de eigenlijke kalender noteert men alle dagen van een gewoon jaar, en nummert deze cyclisch van A tot en met G. Tot slot voegt men de 29ste februari toe. De hulptabel ontstaat door zowel horizontaal als verticaal cyclisch te nummeren van A tot en met G.

## Bepaling met behulp van formules
### Schrikkeljaarbepaling

Het bestaan van schrikkeljaren maakt de juiste bepaling ingewikkelder. Jaartallen die deelbaar zijn door 4 zijn doorgaans een schrikkeljaar, uitzondering hierop zijn de eeuwtallen die deelbaar zijn door 100, maar niet door 400. Voorbeeld: 2004 was een schrikkeljaar, 2000 ook, 1900 niet, 1700 niet, 1600 wel. Bij het vaststellen van onze huidige kalender (anno 1582) wist men al dat 365 dagen in een jaar een tekort van 1 dag in de 4 jaar zou opleveren, op grond hiervan is veel langer geleden al de schrikkeldag ingesteld. Men wist ook dat wanneer dit consequent zou worden toegepast er een overschot van 3 dagen in de 400 jaar zou zijn. Toen ging men rekenen en werd bovengenoemde regel van de eeuwtallen ingesteld.
Onderstaande formules zijn 100% nauwkeurig voor alle data vanaf 1 januari 1583. Ze gaan vergezeld van uitleg en kunnen worden toegepast in rekenkundige omgevingen zoals Excel, JavaScript of PHP. Ze maken gebruik van variabelen, dat zijn locaties voorzien van een naam om gegevens in op te slaan.

### De formules

| Nr | Uitleg | Formule |
| 1 | bepaalt of WJ een schrikkeljaar is Ja : UK01 = 1 Nee : UK01 = 0 | ALS MODULUS(WJ, 4) > 0 DAN UK01 = 0 ANDERS ALS MODULUS(WJ, 100) > 0 DAN UK01 = 1 ANDERS ALS MODULUS(WJ, 400) > 0 DAN UK01 = 0 ANDERS UK01 = 1 |
| 2 | bepaalt het dichtstbijzijnde jaartal in de geschiedenis dat deelbaar is door 400 (incl. huidig jaartal) | UK02 = GEHEEL(WJ / 400) * 400 |
| 3 t/m 6 | bepaalt vanaf UK02 (incl) tot aan WJ (excl) | bepaalt vanaf UK02 (incl) tot aan WJ (excl) |
| 3 | hoeveel jaren er zijn | UK03 = WJ - UK02 |
| 4 | hoeveel dagen er zijn (excl. schrikkeldagen) | UK04 = UK03 * 365 |
| 5 | hoeveel schrikkeldagen er zijn (incl. eeuwgetallen) | UK05 = GEHEEL((UK03 + 3) / 4) |
| 6 | hoeveel niet-schrikkel eeuwgetallen er zijn | UK06 = GEHEEL((UK03 - 1) / 100) |
| 7 | bepaalt het aantal dagen in de voorbije maanden van het jaar met de waarde uit WJ (excl. schrikkeldagen) | UK07 = VOORBIJ[WM] |
| 8 | bepaalt of in WJ schrikkeldag al voorbij is Ja : UK08 = 1 Nee : UK08 = 0 | ALS (WM IS 1 OF WM IS 2) DAN UK08 = 0 ANDERS UK08 = UK01 |
| 9 | bepaalt het aantal dagen vanaf 1 januari van het jaar met de waarde uit UK02 tot en met de wensdatum | UK09 = UK04 + UK05 - UK06 + UK07 + UK08 + WD |
| 10 | bepaalt de weekdag van de wensdatum | UK10 = WEEKDAG[MODULUS(UK09 + 4, 7) + 1] |

### Legenda variabelen

| Variabele | Uitleg | Waarde | Waarde |
| WD | Dag van de maand van de wensdatum | | |
| WM | Maand van de wensdatum (getal) | | |
| WJ | Jaar van de wensdatum (getal van 4 cijfers) | | |
| UKNR | Bevat resultaat van een formule, heeft bij iedere formule een ander volgnummer | | |
| VOORBIJ | Tabel (array) met dagen van maanden die voorbij zijn (zie formule 7) | VOORBIJ[1]=0 VOORBIJ[2]=31 VOORBIJ[3]=59 VOORBIJ[4]=90 VOORBIJ[5]=120 VOORBIJ[6]=151 | VOORBIJ[07]=181 VOORBIJ[08]=212 VOORBIJ[09]=243 VOORBIJ[10]=273 VOORBIJ[11]=304 VOORBIJ[12]=334 |
| WEEKDAG | Tabel (array) met weekdagnamen (zie formule 10) | WEEKDAG[1]=Maandag WEEKDAG[2]=Dinsdag WEEKDAG[3]=Woensdag WEEKDAG[4]=Donderdag | WEEKDAG[5]=Vrijdag WEEKDAG[6]=Zaterdag WEEKDAG[7]=Zondag |

### Legenda functies

| Functie | Uitleg |
| MODULUS | Geeft de restwaarde van een deling als geheel getal. Voorbeelden: MODULUS(13, 7) = 6 MODULUS(26, 7) = 5 |
| GEHEEL | Geeft de waarde van het getal zonder breukwaarde. Voorbeelden: GEHEEL(13 / 7) = 1 GEHEEL(26 / 7) = 3 |