Class: Holidays::DateCalculator::Easter::Gregorian
- Inherits:
-
Object
- Object
- Holidays::DateCalculator::Easter::Gregorian
- Defined in:
- lib/holidays/date_calculator/easter.rb
Instance Method Summary collapse
Instance Method Details
#calculate_easter_for(year) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/holidays/date_calculator/easter.rb', line 5 def calculate_easter_for(year) y = year a = y % 19 b = y / 100 c = y % 100 d = b / 4 e = b % 4 f = (b + 8) / 25 g = (b - f + 1) / 3 h = (19 * a + b - d - g + 15) % 30 i = c / 4 k = c % 4 l = (32 + 2 * e + 2 * i - h - k) % 7 m = (a + 11 * h + 22 * l) / 451 month = (h + l - 7 * m + 114) / 31 day = ((h + l - 7 * m + 114) % 31) + 1 Date.civil(year, month, day) end |
#calculate_orthodox_easter_for(year) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/holidays/date_calculator/easter.rb', line 26 def calculate_orthodox_easter_for(year) j_date = Julian.new.calculate_orthodox_easter_for(year) case # up until 1582, julian and gregorian easter dates were identical when year <= 1582 offset = 0 # between the years 1583 and 1699 10 days are added to the julian day count when (year >= 1583 and year <= 1699) offset = 10 # after 1700, 1 day is added for each century, except if the century year is exactly divisible by 400 (in which case no days are added). # Safe until 4100 AD, when one leap day will be removed. when year >= 1700 offset = (year - 1700).divmod(100)[0] + ((year - year.divmod(100)[1]).divmod(400)[1] == 0 ? 0 : 1) - (year - year.divmod(100)[1] - 1700).divmod(400)[0] + 10 end Date.jd(j_date.jd + offset) end |