© J R Stockton, ≥ 2010-03-19

The Calendrical Works
of Rektor Chr. Zeller :
The Day-of-Week and Easter Formulae
.

Links within this site :-

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.

Introduction

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.

Zeller's Life

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.

Zeller Family Material

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 :-

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.

Links

Zeller's Date Publications

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

The Four Papers

The Card

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.

Discussions

Credits

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.

Principles and Practice

Algorithms

Day-of-Week

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

  1. Day-Count rises with Day-of-Month
  2. For March-based years, Zeller had observed that Day-Count rises near-linearly with Month, and the length of February becomes irrelevant,
  3. 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
  4. 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.

Easter Sunday

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.

Modulo Warning

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.

Performance

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.

On Zeller's Published Date Papers

Overview

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.

Translations of the 1882, 1883, 1885, 1886 Papers

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 :-

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.

Common Notes

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

Day-of-Week

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.

Julian
Gregorian

Easter

The date of Easter is that of Easter Sunday.

Julian

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.

Gregorian

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.

The Gregorian Paschal Full Moon

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".

Likely Errors in Implementations

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.

Day-of-Week

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.

Sites seen with Negative mod Expressions

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.

Easter Sunday

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

Implementation of Zeller's Formulae

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.

Testing

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 (253 ~ 9×1015), and for Day-of-Week by the range of the JavaScript Date Object (±108 days ~ ±275000 years).

Testing Day-of-Week

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.

Julian

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

Gregorian

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.

Check of Gregorian Day-of-Week Formulae

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

Years : -
     

Enter a small year range and press Test. The 'Good' column is the result from a Date object. Unless the box is checked (slow), only days with discrepancies would be shown, marked by '****' in the 'Err?' column.

The dated columns use the corresponding functions from file inc-zell.js : Gpro####(), or Cvt### if "Uncorrected" is set.

Testing Easter

Julian

A full check would need 532 years.

Gregorian

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

Check of Gregorian Easter Formulae

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

Years : -
    as "Day-of-March"

Enter a modest year range and press Test. Unless the box is checked (slow), only years with discrepancies are shown. Discrepancy would be marked by '****' in the 'Err?' column.

The dated columns use the ZEG####() functions for the corresponding paper, in file inc-zell.js .

The 'EGRP' column is the result from the independent, tested function EGRGregEstr(Yr) in file inc-estr.js which is E.G.Richards' Algorithm P.



P4 3GHz XP sp2 IE6 : 5 seconds.

On individual publications by Zeller :- 1882, 1883, 1885, 1886; Card.

See also
Material Related to Zeller's Congruence,
Calendar Weeks, Week Number Calculation, The Date of Easter Sunday,
Date and Day Count, Date Miscellany I, Date Miscellany II; and Time Miscellany.
Home Page
Mail: no HTML
© Dr J R Stockton, near London, UK.
All Rights Reserved.
These pages are tested mainly with Firefox and W3's Tidy.
This site, , is maintained by me.
Head.