API
@-Formulas
JavaScript
LotusScript
Reg Exp
Web Design
Notes Client
XPages
 
Computing Easter Sunday
For a recent project, the customer wanted to use holidays including Easter Sunday. Some holidays are fixed (Christmas Day, New Year's Day), and some float within reason (Labor Day is the first Monday in September, for example). Easter is a different animal. It has to do with the full moon and the spring equinox. After searching the internet, I found I relatively simple formula for computing Easter Sunday.
Please note... if you have purchased the Reusable Object Library Level 2 application, you can use the "Find New Reusable Objects" feature to quickly download this design element and it's associated documentation at no cost.

I'm not going to sit here and claim to know how it works. But the web site claimed to correctly compute Easter Sunday from 1900 to 2099. It even talked about four specific years where the base computation was a week off, so I felt pretty confident with the computation. I put everything into a script library that could be reused to compute the date for Easter Sunday. The function takes an integer year and returns a NotesDateTime object. If the passed-in year is less than 1900 or geater than 2099, then the function returns the keyword Nothing. Here is the function:

Function EasterSunday(inpYear As Integer) As NotesDateTime
   ' Compute Easter Sunday if the year is in the range 1900 to 2099. If the year is outside
   ' of that range, return NOTHING.
   Dim a As Integer
   Dim b As Integer
   Dim c As Integer
   Dim d As Integer
   Dim e As Integer
   Dim tempDate As Variant
   Dim retVal As NotesDateTime
   
   If inpYear < 1900 Or inpYear > 2099 Then
      Set EasterSunday = Nothing
      Exit Function ' =====================
   End If
   a = inpYear Mod 19
   b = inpYear Mod 4
   c = inpYear Mod 7
   d = ( (a*19) + 24) Mod 30
   e = ( (b*2) + (c*4) + (d*6) + 5) Mod 7
   If (22+d+e) <= 31 Then
      tempDate = Datenumber(inpYear, 3, (22+d+e))
   Else
      tempDate = Datenumber(inpYear, 4, (d+e-9))
   End If
   Set retVal = New NotesDateTime(tempDate)
   If ( (inpYear = 1954) Or (inpYear = 1981) Or (inpYear = 2049) Or (inpYear = 2076) ) Then
      Call retVal.AdjustDay(-7)
   End If
   Set EasterSunday = retVal
End Function