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.



82
83
84
# File 'lib/easter.rb', line 82

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.



76
77
78
# File 'lib/easter.rb', line 76

def self.ash_wednesday(some_year=Time.now.year)
  easter(some_year) - 46
end

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



26
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
# File 'lib/easter.rb', line 26

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 DateTime.new(y=some_year, m=3, d=day_easter + 21)
  else
    # Easter occurs in April.
    return DateTime.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.



64
65
66
# File 'lib/easter.rb', line 64

def self.good_friday(some_year=Time.now.year)
  easter(some_year) - 2
end

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

Determine the date of Palm Sunday for a given year.



70
71
72
# File 'lib/easter.rb', line 70

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.



88
89
90
# File 'lib/easter.rb', line 88

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