class Easter

Public Class Methods

ascension_day(some_year=Time.now.year) click to toggle source

Determines the date of Ascension Day for a given year.

# File lib/easter.rb, line 91
def self.ascension_day(some_year=Time.now.year)
  easter(some_year) + 39
end
ash_wednesday(some_year=Time.now.year) click to toggle source

Determines the date of Ash Wednesday for a given year.

# File lib/easter.rb, line 85
def self.ash_wednesday(some_year=Time.now.year)
  easter(some_year) - 46
end
easter(some_year=Time.now.year) click to toggle source
# File lib/easter.rb, line 27
def self.easter(some_year=Time.now.year)

  golden_number = (some_year % 19) + 1
  
  if some_year <= 1752 then
    # Julian calendar
    dominical_number = (some_year + (some_year / 4) + 5) % 7
    paschal_full_moon = (3 - (11 * golden_number) - 7) % 30
  else
    # Gregorian calendar
    dominical_number = (some_year + (some_year / 4) - (some_year / 100) + (some_year / 400)) % 7
    solar_correction = (some_year - 1600) / 100 - (some_year - 1600) / 400
    lunar_correction = (((some_year - 1400) / 100) * 8) / 25
    paschal_full_moon = (3 - 11 * golden_number + solar_correction - lunar_correction) % 30
  end
  
  dominical_number += 7 until dominical_number > 0 

  paschal_full_moon += 30 until paschal_full_moon > 0 
  paschal_full_moon -= 1 if paschal_full_moon == 29 or (paschal_full_moon == 28 and golden_number > 11)

  difference = (4 - paschal_full_moon - dominical_number) % 7
  difference += 7 if difference < 0 

  day_easter = paschal_full_moon + difference + 1
  
  if day_easter < 11 then
    # Easter occurs in March.
    return Date.new(y=some_year, m=3, d=day_easter + 21)
  else
    # Easter occurs in April.
    return Date.new(y=some_year, m=4, d=day_easter - 10)
  end
  
end
good_friday(some_year=Time.now.year) click to toggle source

Determine the date of Good Friday for a given year.

# File lib/easter.rb, line 69
def self.good_friday(some_year=Time.now.year)
  easter(some_year) - 2
end
holy_saturday(some_year=Time.now.year) click to toggle source
# File lib/easter.rb, line 73
def self.holy_saturday(some_year=Time.now.year)
  easter(some_year) - 1
end
holy_thursday(some_year=Time.now.year) click to toggle source
# File lib/easter.rb, line 63
def self.holy_thursday(some_year=Time.now.year)
  easter(some_year) - 3
end
palm_sunday(some_year=Time.now.year) click to toggle source

Determine the date of Palm Sunday for a given year.

# File lib/easter.rb, line 79
def self.palm_sunday(some_year=Time.now.year)
  easter(some_year) - 7
end
pentecost(some_year=Time.now.year) click to toggle source

Determines the date of Pentecost for a given year.

# File lib/easter.rb, line 97
def self.pentecost(some_year=Time.now.year)
  easter(some_year) + 49
end