Easter and Lunar Calendars

Like many professionals, I make heavy use of online calendars. And CalDAV is surprisingly featureful, well beyond what most calendar apps actually implement.

But, there are some advanced features that I wish the CalDAV protocol and it’s clients implemented:

The first feature idea is below. And I’ll post the next two in the next few days.

The Details

In the Christian tradition, many feast days are relative to the date of Easter. For example, Pentecost is 50 days after the date of Easter.

Right now, this requires manually setting up the dates of these feasts each year. Or (more likely) subscribing to a calendar feed that has done this work.

This is a manual process, because of the fact that the date of Easter is based on the lunar calendar.

From the Hebrew calendar, Passover is the 15th day of the first month of the ecclesiastical year: Nisan. For simplicity, this is the first full moon on or after the 21st of March.

The date of Easter is the first Sunday after this. So the calculation is not so trivial because of the pair of requirements: the full moon after the equinox.

To make this work in calendars, I see 3 options:

  1. Supporting recurrence rules based on multiple criteria: the lunar calendar & equinoxes
  2. Hardcoding the Easter calculation as a recurrence rule option
  3. Supporting events with dates relative to other events

Turning recurrence rules into complex logic will kill performance and depending on the details, it would require a SAT solver to fully implement correctly.

That would be awesome for other complex scenarios. And the date calculations could be heavily cached on the server to improve performance. But, this is extremely unlikely to get implemented. 1

Hardcoding the calculation for Easter is complicated because there is significant disagreement that are still not resolved. Though, there have been recent attempts to resolve the dispute. 2

The last option I can think of is to punt a bit and just support basing events off of other events. This would still require manually calculating the date of Easter, but then you could base all the other dates off of it.

This feature would be useful for other things too! And that’s the mark of a great feature.

Conclusion

Of all the solutions I thought of, I’m most interested in the ability to base events off of the dates of other events. This kind of semantic relationship is what I’m looking for in my calendar.

And, the solution would also apply to general cases like follow-up meetings.


  1. Granted, it’s a pipe-dream in general to think about new features on such an old protocol with ossified implementation and little spec movement. But a man can dream!
  2. Pope on shared Easter date with Orthodox: Pick a date and we’ll accept
Want new articles in your email inbox?