© J R Stockton, ≥ 2010-03-19

of Rektor Chr. Zeller :

The Day-of-Week and Easter Formulae.

Links within this site :-

**Merlyn Home Page**- Site Index, E-Mail, Copying**This Page**:-- Images of Zeller's Actual Papers - 1882, 1883, 1885, 1886.
- Zeller's Papers Translated, with individual notes :-
- On Zeller's Card "Das Ganze der Kalender-Rechnung"
- Material Related to Zeller's Congruence (was on this page) :-
- Leap Years
- Calendar Weeks
- The Date of Easter Sunday
- The Calculation of Easter Sunday after the Book of Common Prayer of the Church of England
- The Dates of Moveable Feasts & Fasts
- Date and Day Count
- Lists :-
- JavaScript Include Files
- JavaScript Index and Introduction
- JavaScript Date and Time
- VBScript Date and Time, Easter, Summer Time
- For more date/time pages, and links, see Date and Time Index and Links

There is a ZIPped snapshot including these Zeller pages and their graphics (619kB+), taken on or after 2012-05-19; unZIP it in an empty directory.

Note : Elsewhere, I might continue to use my own Day-of-Week code, and my own Easter formulae or ones taken from the Calendar FAQ.

Each of Rektor Zeller's four calendrical papers deals with determining the Day-of-Week from the date, and the date of Easter Sunday from the year number, in the old Julian and new Gregorian calendars. They are all similar, and basically equivalent mathematically.

These pages address the questions "What did Zeller actually state?", "What expressions derive directly from his work?", "What else did he do?", etc. They present the papers in English (1882, 1883, 1885, 1886), and show images of the actual papers (1882, 1883, 1885, 1886); and one page deals with a card of formulae. They give expressions suitable for computer use and provide tests of Zeller's results.

The term "Zeller's Congruence" refers to the Day-of-Week calculation, and is frequently used in connection with widely varying expressions (not all reliable) for determining the day of the week or the lengths, or accumulated length, of months. As such, it is treated separately in Material Related to Zeller's Congruence.

Rektor Christian Zeller (1822-99) was a protestant minister in
Markgröningen (Württemberg, SW Germany; 20 km NW of
Stuttgart). *E.G.Richards, in his book
"Mapping Time", states that Zeller was a director of a women's teacher
training college and a school inspector.*

*Reported : Bibliographical data according to Poggendorff
:- Christian Julius Johannes Zeller, 1822..1899.*

In 1882, 1883, 1885, & 1886, Zeller published formulae for relating the Day-of-Week to the (A.D.) date, and for calculating the date of Easter Sunday, for both the Gregorian and the Julian Calendars.

A Web search once found Zellertag
2001, containing *"Zum Zellertag laden wir in diesem Jahr nach
Markgröningen ein. Dort war Christian Zeller (ZB 136) von 1868 bis
1898 der erste Rektor des Lehrerinnenseminars (heute
Helene-Lange-Gymnasium)"* and *"15.00 Uhr ... Vortrag von Herbert
Leube über Rektor Christian Zeller"*.

The presentation by Dr H Leube (a great-grandson of Zeller) was published in "Nachrichten des Martinszeller Verbands", Dec. 2001, p.8-17. He has kindly supplied me with a private (h w e) copy of his text to study, from which the following box of information is taken.

Julius Christian Johannes Zeller, born the tenth of eleven children in 1822, studied Mathematics and Geography in his youth, and later Theology. He was married twice, having nine children (seven growing to adulthood) and thirty-six grandchildren. In 1874, he became Director of the Seminary in Markgröningen, together with the girls' orphanage there.

In addition to his Date papers, it appears that he published papers about number theory :-

- "Ein neuer Beweis des Reziprozitäts-Theorems" (Berlin 1872)
- "De numeris Bernoulli eorumque compositione ex numeris integris et reciprocis primis" (Paris 1881)
- "Zu Eulers Recursionsformel für die Divisorensummen" (Stockholm 1884)

In 1882 he was admitted into the Société Mathématique de France. His later honours included the Order of Friedrich, First Class, and the Ritterkreuz of Württemberg. He retired in 1898, and died in the following Summer.

There is a family book: "Gerhard Zeller, *Nachfahren der Familie
Zeller aus Martinszell*, Stuttgart 1995", price €25 plus
postage.

- Wikipedia :-
- "Christian Zeller" pages : German, English.
- Markgröningen

- Familie Zeller aus Martinszell :
Homepage des
Martinszeller Verbandes, linking to :-
- Christian
Zeller (1822-1899)

Vortrag von Herbert Leube beim Zeller-Tag 2001 in Markgröningen - Portrait and biography, linking to :-- Von Ulrich Leube : Kalenderformeln
von Christian Zeller

Die Kalenderformel von Christian Zeller, gedruckt und in Postkartenform verbreitet, which shows and discusses the Card.

- Von Ulrich Leube : Kalenderformeln
von Christian Zeller
- Genealogy :-

- Christian
Zeller (1822-1899)
- Helene-Lange-Gymnasium - College Website
- Markgröningen - Town Website

*As far as I know, Rektor Zeller did not formally publish anything
related to date or time other than the four papers listed below.*

- "Die Grundaufgaben der Kalenderrechnung auf neue und vereinfachte Weise
gelöst", Zeller, Chr.,
*Württembergische Vierteljahrshefte für Landesgeschichte*, Jahrgang V (1882), pp. 313-314. - in German. - "Problema duplex Calendarii fundamentale;" Par M. Ch. Zeller,
*Bulletin de la Société Mathématique de France*, vol.11, pp.59-61, (Séance du 16 mars 1883) - in Latin. - "Kalender-Formeln" von Rektor Chr. Zeller,
*Mathematisch-naturwissenschaftliche Mitteilungen des mathematisch-naturwissenschaftlichen Vereins in Württemberg*, ser. 1, 1 (1885), 54-58. - in German. - "Kalender-Formeln" von Chr. Zeller,
*Acta Mathematica*, vol.9 (1886-7), pp.131-6. (Nov 1886) - in German. There was a transcription in HTML at Polysyllabic (+).

There is an undated Card (Postkarte), "Das Ganze der Kalender-Rechnung", by "Chr. Zeller, Seminar-Rektor, Markgröningen." in black-letter, priced 10 Pf. It gives, for Old and New Calendars, methods for the Day-of-Week, the Paschal Full Moon, and the Date of Easter Sunday.

- Wikipedia - "Congruence" pages : German, English.
- Kalenderrechnung - Wochentagsberechnung und Berechnung des Ostertermins nach Christian Zeller - Daniel Tibi

Sebastian Koppehel of the University of Hamburg kindly provided me,
by E-mail in April 2002, with a translation of the Day-of-Week section
of Zeller's *Acta Mathematica* paper of 1886, and his comment on
it.

I have received, through the good offices of Dr D M Herbert of Imperial College London, copies of the 1883 and 1886 Zeller papers cited above; and likewise, through Dr D R de Lacey of Cambridge, a copy of the 1885 paper.

Tony Brook of London SW20 gave me a translation of the 1883 paper, in spite of it not being in the sort of Latin that Caesar would have used.

Robert H. van Gent of the University of Utrecht sent me a copy of the 1882 paper; Philip Newton of Hamburg helped with the difficult paragraphs.

Anthony Holley scanned copies of the printed pages for me.

Gerhard Zeller of the Martinszeller-Verein kindly sent me an image of the Card, a BASIC program, and biographical material.

The Day-of-Week is in essence the remainder obtained by dividing the Day-Count by seven :-

- Day-Count rises with Day-of-Month
- For March-based years, Zeller had observed that Day-Count rises near-linearly with Month, and the length of February becomes irrelevant,
- For March-based years, Day-Count rises by 365 per year, with correcting terms for each applicable Leap Year Rule depending only on the year
- If only Day-of-Week is needed, multiples of seven can be omitted throughout.

For Rule 2, Zeller used a factor of 26/10, equivalent to 30.6 days
per month, presumably the simplest to work with. It appears that 367/12
= 28 + 31/12 = 30.583 days per month, which might be considered more
logical^{*}, can also be used.

Zeller always treated January & February as months 13 & 14,
the other months retaining their natural values. Some derivative authors
present non-*echt* versions in which January & February are
treated as months 11 & 12, with the natural values of the other
months being reduced by two.

Zeller used Saturday=0 to Friday=6; some derivative authors vary.

* : If February were an "ordinary short" month, the year would have 367 days.

The Easter calculations are probably derived, somehow, from the data auxiliary to the Papal Bull of 1582. The Bull is on the Web, in Latin, French, and English. The auxiliary material is on the Web, in Latin and French. See in my The Date of Easter Sunday and Date and Time Index and Links.. Zeller's Easter functions, as implemented here, seem to be fast by comparison with some more recent versions.

Gregorian Easter algorithms containing `Year/300` or
`Centade/3` are invalid for years outside AD 1500 to 4199; see
1886 II.1 Note 1.

In the "two special cases", Zeller's *Ostervollmond* date must
differ, by a week, from the Paschal Full Moon date calculated from the
Calendar Act, which applies the adjustment earlier. That, and the
correct adjustment, are demonstrated at Tests for the Card.

For both Day-of-Week and Easter, the Modulo-*N* (remainder on
division by a constant) operation is needed. Computers tend not to give
the desired answer when the variable argiment is negative. This can
affect Week and Century, but is easily avoided or corrected.

See Likely Errors in Implementations below.

Subject to the modulo and Full Moon warnings above, and apart from the simplification noted for 1886 II.B.2, I believe Zeller's algorithms to be completely accurate for all years from A.D. 1; and for earlier years if the year number is treated thoughtfully.

Earlier years can be safely accommodated by adding a sufficient multiple of the appropriate calendar repeat interval, which is 28 or 400 years for the Julian and Gregorian secular calendars, and 532 or 5700000 years including Easter.

For computer use, the Day-of-Week algorithm can be slightly improved.

The 1885 and 1886 papers are, basically, expansions of the 1883 one, which is itself a version of that of 1882.

In each of these four papers, the first section deals with determining the Day-of-Week from the Date, and the second section deals with determining the date of Easter Sunday from the Year; in each case, for both the Julian and the Gregorian Calendars and for any year A.D.

Zeller's methods were, naturally, intended for intelligent implementation; he did not need to be as careful about negative numbers as a programmer should be.

For reasons of size and structure, the translations of the papers themselves are now, with their specific Notes and Tests, on separate Web pages (each of which links to a page of images of the original printed pages :-

- 1882 : "Die Grundaufgaben der Kalenderrechnung auf neue und vereinfachte Weise gelöst"
- 1883 : "Problema duplex Calendarii fundamentale"
- 1885 : "Kalender-Formeln"
- 1886 : "Kalender-Formeln"

The Card is shown, translated, and considered at "Das Ganze der Kalender-Rechnung".

It is impractical to reproduce in HTML the exact layout of the originals; but they have been used as a guide.

Zeller used "century" for the year number truncated by two digits; I use "centade" elsewhere.

Zeller numbered the days of the week from Sunday=1 to Saturday=7 (or
0). This differs from ISO 8601,
which uses only Monday=1 to Sunday=7. Convert to ISO by `((W+5) mod
7) + 1` ; the 5 can be added within the main expression.

Zeller nowhere mentioned that his numbering in the Papers represents Saturday, the seventh day of his week, by 0.

Zeller explicitly recognised the alternative of addition in the formulae of 1882 (J G), 1883 (G), 1885 (J G), but not of 1886.

The date of Easter is that of Easter Sunday.

2007-05-15 : I have discovered that a mod-7 effect similar to Gregorian paragraph 2 below can affect Julian (it was noted as possible); correction applied today; discussion to be improved when time permits.

For all four Papers :-

Probably *1583-1700, 1700-1900, 1900-2200* should be
*1583-1699, 1700-1899, 1900-2199*. The first Easter celebrated
under the Gregorian rules was that of 1583.

The last term in the first expression in the third instruction
contains a factor of *-2*; in order to avoid occasional mod-7 error
in computing the remainder *d*, change it to *+5*.

For the special cases in the third instruction, *a>10* is
potentially discrepant with *a<10* in the corresponding Example.
Testing with *a≥10* shows that the difference is significant,
but only in the years 675, 827, 7515, 7610, 7762 ..., and that
*a>10* is correct. The Examples are all for the year 1886, when
*a=5*.

In each Paper, that adjustment is applied after calculating the Paschal Full Moon. There, it allows Easter Sunday to be on the same day as the calculated Moon date. Easter is given correctly; therefore the Moon date is wrong. The adjustment should be applied earlier. See in my On Chr. Zeller's Card "Das Ganze der Kalender-Rechnung".

Both for Day-of-Week and for Easter, the remainder-after-division operation (modulo) will be needed. Care should be taken to consider the possibility of its argument being negative, since computers tend not to give the desired answer in that case.

This applies to splitting YYYY into CCYY, for negative years; and in other parts of the work, for some input values.

Zeller expected that expressions would be evaluated manually. It seems, in the 1882 and 1883 papers, that he was aware that a negative term might make the argument of a sevens-remainder operation in a Day-of-Week calculation go negative; but he would have expected this to be dealt with sensibly, by first adding a sufficient multiple of seven.

Unfortunately, the usual
computer implementation of the modulus operator does not work that way;
it treats *(-A) mod B* as *-(A mod B)*. For my views on this,
see, for example, my discussions for
JavaScript and
Pascal.

More details can be found on the pages for the individual papers.

The simplest correction is to ensure that the argument never goes negative, by replacing a negative term with an equivalent positive one, after Zeller himself. Alternatively, if the result is negative then add the divisor.

Test boxes in the pages for the papers demonstrate the effect in the Day-of-Week formulae; the Easter code is corrected.

Incautious computer implementations are liable, therefore, to error; some are known to have been wrong. Programmers might not have thought to test the necessary dates.

It happens that the modulo-7 error occurs for a fraction of dates, in March onwards, early in each "century", Saturdays excepted; simple testing before Y2k might have missed it. For example, an Internet Draft has been seen to need correction (and has received it).

Risks Digest, 22.18 #10, refers.

2006-02-04 : Two substantially identical Wikipedia pages entitled Zeller's
congruence display (algebraically) the dangerous form. Although
there is a note on the problem, the obvious correction (as shown by
Zeller in 1882) is not indicated. They give a pseudo-code Day-of-Week
algorithm which uses a table indexed by month, and which is therefore
**not** Zeller's.

2006-06-18 : The dangerous form is still shown algebraically, but with notes on the correction needed, in both the English and the German pages.

Several sites have been seen to have been corrected or improved.

A modulo problem can also arise in the Easter work; 2002 is an example.

The algorithms of each paper are implemented, in JavaScript, in
include file `inc-zell.js` and are shown at JavaScript Include Files.

In Day-of-Week, X representing either G or J, "Xdow" results are for the expressions given directly by Zeller, and "Xpro" results are protected against "modulo 7" error.

For Easter Sunday, results are protected where that has been found necessary.

There are manual tests, Julian and Gregorian, at the end of each "Paper" page.

Watch out for special cases such as, but not necessarily limited to, the modulo 7 trap. The tests on this page use versions that avoid the trap.

For A.D. 1-32000, results can be checked by my program mjd_date.

Best is a full check over the repeat interval for the calendar, combined with a check that the year-part of the implementation itself then repeats.

The Gregorian testers below can get very slow, or fail, with complete output for large ranges (a JavaScript limitation).

Julian testing is left for those who need it; see in JavaScript Date and Time 8 : Enhancing the Object for adding Julian Calendar methods to the Date Object.

The test code here is limited by the integer range of the JavaScript
Number type (2^{53} ~ 9×10^{15}), and for
Day-of-Week by the range of the JavaScript Date Object
(±10^{8} days ~ ±275000 years).

The variations of Day-of-Week with year, month, and day are substantially independent, though the February-March transition needs particular attention. If the days of a chosen month are correct, and the first days of each month of a chosen year are correct, and the first days of March of each year of a moderate set including all year types and the early 2000s are correct, then the implementation is probably about right.

Now, the test form can use values not corrected for *Mod 7*
errors, and will then show all dates in range for which they occur.

Include both Julian types of year (*e.g.* 1580, 1581); the
calendar repeats after each 28 years.

Include all four Gregorian types of year (*e.g.* 2000, 2001,
2004, 2100); the calendar repeats after each 400 years.

My greg-cal.txt gives the Day-of-Week for every day in 1970-2030; my greg-1mo.txt gives the Day-of-Week for the first day of every Gregorian month in 1600-2800.

A full check, needing 400 years, has been done.

A full check would need 532 years.

My estr-tbl.txt gives the date of Gregorian Easter Sunday for 1900-2150.

A full check, needing 5,700,000 years, has been done.