Class: Easter

Inherits:
Object
  • Object
show all
Defined in:
lib/easter.rb

Class Method Summary collapse

Class Method Details

.ascension_day(some_year = Time.now.year) ⇒ Object

Determines the date of Ascension Day for a given year.



91
92
93
# 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) ⇒ Object

Determines the date of Ash Wednesday for a given year.



85
86
87
# 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) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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) ⇒ Object

Determine the date of Good Friday for a given year.



69
70
71
# 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) ⇒ Object



73
74
75
# 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) ⇒ Object



63
64
65
# 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) ⇒ Object

Determine the date of Palm Sunday for a given year.



79
80
81
# 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) ⇒ Object

Determines the date of Pentecost for a given year.



97
98
99
# File 'lib/easter.rb', line 97

def self.pentecost(some_year=Time.now.year)
  easter(some_year) + 49
end