| @@ 13-142 (lines=130) @@ | ||
| 10 | * |
|
| 11 | * @package Stefanius\SpecialDates\CommonDates |
|
| 12 | */ |
|
| 13 | class FirstEasterDay extends AbstractSpecialDate |
|
| 14 | { |
|
| 15 | protected function generate() |
|
| 16 | { |
|
| 17 | $this->bankHoliday = true; |
|
| 18 | $this->description = 'Eerste paasdag'; |
|
| 19 | ||
| 20 | $g = $this->calculateGNumber(); |
|
| 21 | $c = $this->calculateCNumber(); |
|
| 22 | $x = $this->calculateXNumber($c); |
|
| 23 | $y = $this->calculateYNumber($c); |
|
| 24 | $z = $this->calculateZNumber($x); |
|
| 25 | $e = $this->calculateENumber($g, $y, $x); |
|
| 26 | $n = $this->calculateNNumber($e); |
|
| 27 | $p = $this->calculatePNumber($z, $n); |
|
| 28 | ||
| 29 | if ($p > 31) { |
|
| 30 | $p -= 31; |
|
| 31 | $this->setupDateTimeObjects($this->generateDateTime($this->year, 4, $p)); |
|
| 32 | } else { |
|
| 33 | $this->setupDateTimeObjects($this->generateDateTime($this->year, 3, $p)); |
|
| 34 | } |
|
| 35 | } |
|
| 36 | ||
| 37 | /** |
|
| 38 | * Deel het jaartal door 19, neem de rest, en tel er 1 bij op (zoals Dionysius). Noem dit getal G. Voor het jaar 1991 geldt G = 16. |
|
| 39 | * |
|
| 40 | * @return int |
|
| 41 | */ |
|
| 42 | protected function calculateGNumber() |
|
| 43 | { |
|
| 44 | return ($this->year % 19) + 1; |
|
| 45 | } |
|
| 46 | ||
| 47 | /** |
|
| 48 | * Geheeldeel het jaartal door 100 en tel daar 1 bij op. Noem dit getal C. Voor het jaar 1991 geldt C = 20. |
|
| 49 | * |
|
| 50 | * @return int |
|
| 51 | */ |
|
| 52 | protected function calculateCNumber() |
|
| 53 | { |
|
| 54 | return (int)floor($this->year / 100) + 1; |
|
| 55 | } |
|
| 56 | ||
| 57 | /** |
|
| 58 | * Vermenigvuldig C met 3, geheeldeel het resultaat door 4 en trek er 12 van af. Noem dit getal X. Voor de twintigste en eenentwintigste eeuw geldt X = 3. |
|
| 59 | * |
|
| 60 | * @param int $c |
|
| 61 | * @return float |
|
| 62 | */ |
|
| 63 | protected function calculateXNumber(int $c) |
|
| 64 | { |
|
| 65 | return (($c * 3) / 4) - 12; |
|
| 66 | } |
|
| 67 | ||
| 68 | /** |
|
| 69 | * Neem 8 maal C, tel er 5 bij op, geheeldeel dit door 25 en trek er 5 vanaf. Noem dit getal Y. Voor de twintigste en eenentwintigste eeuw geldt: Y = 1. |
|
| 70 | * |
|
| 71 | * @param int $c |
|
| 72 | * @return float |
|
| 73 | */ |
|
| 74 | protected function calculateYNumber(int $c) |
|
| 75 | { |
|
| 76 | return ((($c * 8) + 4) / 25) - 5; |
|
| 77 | } |
|
| 78 | ||
| 79 | /** |
|
| 80 | * Vermenigvuldig het jaartal met 5, geheeldeel de uitkomst door 4, trek er X en 10 vanaf, en noem dit getal Z. Voor 1991 geldt: Z = 2475. |
|
| 81 | * |
|
| 82 | * @param int $x |
|
| 83 | * @return float |
|
| 84 | */ |
|
| 85 | protected function calculateZNumber(int $x) |
|
| 86 | { |
|
| 87 | return ((($this->year * 5) / 4) - $x) - 10; |
|
| 88 | } |
|
| 89 | ||
| 90 | /** |
|
| 91 | * 11 maal G + 20 + Y. Trek daarvan X af, geheeldeel het resultaat door 30 en noem de rest E. Als E gelijk is aan 24, of als E gelijk is aan 25 en het gulden getal is groter dan 11, tel dan 1 bij E op. De Epacta voor 1991 is 14. |
|
| 92 | * |
|
| 93 | * @param int $x |
|
| 94 | * @return float |
|
| 95 | */ |
|
| 96 | protected function calculateENumber(int $g, int $y, int $x) |
|
| 97 | { |
|
| 98 | $e = (((($g * 11) + 20) + $y) - $x) % 30; |
|
| 99 | ||
| 100 | if (($e === 24) || ($e === 25 && $g > 11)) { |
|
| 101 | $e++; |
|
| 102 | } |
|
| 103 | ||
| 104 | return $e; |
|
| 105 | } |
|
| 106 | ||
| 107 | /** |
|
| 108 | * Trek E af van 44. Noem dit getal N. Als N kleiner is dan 21, tel er dan 30 bij op. Voor 1991 geldt: N = 30 |
|
| 109 | * |
|
| 110 | * @param int $e |
|
| 111 | * |
|
| 112 | * @return int |
|
| 113 | */ |
|
| 114 | protected function calculateNNumber(int $e) |
|
| 115 | { |
|
| 116 | $n = 44 - $e; |
|
| 117 | ||
| 118 | if ($n < 21) { |
|
| 119 | $n += 30; |
|
| 120 | } |
|
| 121 | ||
| 122 | return $n; |
|
| 123 | } |
|
| 124 | ||
| 125 | /** |
|
| 126 | * Tel Z en N op. Geheeldeel het resultaat door 7 en trek de rest af van N+7. Noem dit getal P. Voor 1991 geldt: P = 31. |
|
| 127 | * |
|
| 128 | * @param int $z |
|
| 129 | * @param int $n |
|
| 130 | * @return int |
|
| 131 | */ |
|
| 132 | protected function calculatePNumber(int $z, int $n) |
|
| 133 | { |
|
| 134 | return ($n + 7) - (($z + $n) % 7); |
|
| 135 | } |
|
| 136 | ||
| 137 | /** |
|
| 138 | ||
| 139 | ||
| 140 | Paasdatum: Als P groter is dan 31, trek er dan 31 vanaf, en de paasdatum valt in april. Anders is de paasdag P in maart. Zo wordt voor 1991 gevonden 31 maart. |
|
| 141 | */ |
|
| 142 | } |
|
| 143 | ||
| @@ 13-142 (lines=130) @@ | ||
| 10 | * |
|
| 11 | * @package Stefanius\SpecialDates\CommonDates |
|
| 12 | */ |
|
| 13 | class GoodFriday extends AbstractSpecialDate |
|
| 14 | { |
|
| 15 | protected function generate() |
|
| 16 | { |
|
| 17 | $this->bankHoliday = true; |
|
| 18 | $this->description = 'Goede vrijdag'; |
|
| 19 | ||
| 20 | $g = $this->calculateGNumber(); |
|
| 21 | $c = $this->calculateCNumber(); |
|
| 22 | $x = $this->calculateXNumber($c); |
|
| 23 | $y = $this->calculateYNumber($c); |
|
| 24 | $z = $this->calculateZNumber($x); |
|
| 25 | $e = $this->calculateENumber($g, $y, $x); |
|
| 26 | $n = $this->calculateNNumber($e); |
|
| 27 | $p = $this->calculatePNumber($z, $n); |
|
| 28 | ||
| 29 | if ($p > 31) { |
|
| 30 | $p -= 31; |
|
| 31 | $this->setupDateTimeObjects($this->generateDateTime($this->year, 4, $p)->modify('-2 days')); |
|
| 32 | } else { |
|
| 33 | $this->setupDateTimeObjects($this->generateDateTime($this->year, 3, $p)->modify('-2 days')); |
|
| 34 | } |
|
| 35 | } |
|
| 36 | ||
| 37 | /** |
|
| 38 | * Deel het jaartal door 19, neem de rest, en tel er 1 bij op (zoals Dionysius). Noem dit getal G. Voor het jaar 1991 geldt G = 16. |
|
| 39 | * |
|
| 40 | * @return int |
|
| 41 | */ |
|
| 42 | protected function calculateGNumber() |
|
| 43 | { |
|
| 44 | return ($this->year % 19) + 1; |
|
| 45 | } |
|
| 46 | ||
| 47 | /** |
|
| 48 | * Geheeldeel het jaartal door 100 en tel daar 1 bij op. Noem dit getal C. Voor het jaar 1991 geldt C = 20. |
|
| 49 | * |
|
| 50 | * @return int |
|
| 51 | */ |
|
| 52 | protected function calculateCNumber() |
|
| 53 | { |
|
| 54 | return (int)floor($this->year / 100) + 1; |
|
| 55 | } |
|
| 56 | ||
| 57 | /** |
|
| 58 | * Vermenigvuldig C met 3, geheeldeel het resultaat door 4 en trek er 12 van af. Noem dit getal X. Voor de twintigste en eenentwintigste eeuw geldt X = 3. |
|
| 59 | * |
|
| 60 | * @param int $c |
|
| 61 | * @return float |
|
| 62 | */ |
|
| 63 | protected function calculateXNumber(int $c) |
|
| 64 | { |
|
| 65 | return (($c * 3) / 4) - 12; |
|
| 66 | } |
|
| 67 | ||
| 68 | /** |
|
| 69 | * Neem 8 maal C, tel er 5 bij op, geheeldeel dit door 25 en trek er 5 vanaf. Noem dit getal Y. Voor de twintigste en eenentwintigste eeuw geldt: Y = 1. |
|
| 70 | * |
|
| 71 | * @param int $c |
|
| 72 | * @return float |
|
| 73 | */ |
|
| 74 | protected function calculateYNumber(int $c) |
|
| 75 | { |
|
| 76 | return ((($c * 8) + 4) / 25) - 5; |
|
| 77 | } |
|
| 78 | ||
| 79 | /** |
|
| 80 | * Vermenigvuldig het jaartal met 5, geheeldeel de uitkomst door 4, trek er X en 10 vanaf, en noem dit getal Z. Voor 1991 geldt: Z = 2475. |
|
| 81 | * |
|
| 82 | * @param int $x |
|
| 83 | * @return float |
|
| 84 | */ |
|
| 85 | protected function calculateZNumber(int $x) |
|
| 86 | { |
|
| 87 | return ((($this->year * 5) / 4) - $x) - 10; |
|
| 88 | } |
|
| 89 | ||
| 90 | /** |
|
| 91 | * 11 maal G + 20 + Y. Trek daarvan X af, geheeldeel het resultaat door 30 en noem de rest E. Als E gelijk is aan 24, of als E gelijk is aan 25 en het gulden getal is groter dan 11, tel dan 1 bij E op. De Epacta voor 1991 is 14. |
|
| 92 | * |
|
| 93 | * @param int $x |
|
| 94 | * @return float |
|
| 95 | */ |
|
| 96 | protected function calculateENumber(int $g, int $y, int $x) |
|
| 97 | { |
|
| 98 | $e = (((($g * 11) + 20) + $y) - $x) % 30; |
|
| 99 | ||
| 100 | if (($e === 24) || ($e === 25 && $g > 11)) { |
|
| 101 | $e++; |
|
| 102 | } |
|
| 103 | ||
| 104 | return $e; |
|
| 105 | } |
|
| 106 | ||
| 107 | /** |
|
| 108 | * Trek E af van 44. Noem dit getal N. Als N kleiner is dan 21, tel er dan 30 bij op. Voor 1991 geldt: N = 30 |
|
| 109 | * |
|
| 110 | * @param int $e |
|
| 111 | * |
|
| 112 | * @return int |
|
| 113 | */ |
|
| 114 | protected function calculateNNumber(int $e) |
|
| 115 | { |
|
| 116 | $n = 44 - $e; |
|
| 117 | ||
| 118 | if ($n < 21) { |
|
| 119 | $n += 30; |
|
| 120 | } |
|
| 121 | ||
| 122 | return $n; |
|
| 123 | } |
|
| 124 | ||
| 125 | /** |
|
| 126 | * Tel Z en N op. Geheeldeel het resultaat door 7 en trek de rest af van N+7. Noem dit getal P. Voor 1991 geldt: P = 31. |
|
| 127 | * |
|
| 128 | * @param int $z |
|
| 129 | * @param int $n |
|
| 130 | * @return int |
|
| 131 | */ |
|
| 132 | protected function calculatePNumber(int $z, int $n) |
|
| 133 | { |
|
| 134 | return ($n + 7) - (($z + $n) % 7); |
|
| 135 | } |
|
| 136 | ||
| 137 | /** |
|
| 138 | ||
| 139 | ||
| 140 | Paasdatum: Als P groter is dan 31, trek er dan 31 vanaf, en de paasdatum valt in april. Anders is de paasdag P in maart. Zo wordt voor 1991 gevonden 31 maart. |
|
| 141 | */ |
|
| 142 | } |
|
| 143 | ||
| @@ 13-142 (lines=130) @@ | ||
| 10 | * |
|
| 11 | * @package Stefanius\SpecialDates\CommonDates |
|
| 12 | */ |
|
| 13 | class SecondEasterDay extends AbstractSpecialDate |
|
| 14 | { |
|
| 15 | protected function generate() |
|
| 16 | { |
|
| 17 | $this->bankHoliday = true; |
|
| 18 | $this->description = 'Tweede paasdag'; |
|
| 19 | ||
| 20 | $g = $this->calculateGNumber(); |
|
| 21 | $c = $this->calculateCNumber(); |
|
| 22 | $x = $this->calculateXNumber($c); |
|
| 23 | $y = $this->calculateYNumber($c); |
|
| 24 | $z = $this->calculateZNumber($x); |
|
| 25 | $e = $this->calculateENumber($g, $y, $x); |
|
| 26 | $n = $this->calculateNNumber($e); |
|
| 27 | $p = $this->calculatePNumber($z, $n); |
|
| 28 | ||
| 29 | if ($p > 31) { |
|
| 30 | $p -= 31; |
|
| 31 | $this->setupDateTimeObjects($this->generateDateTime($this->year, 4, $p)->modify("+1 day")); |
|
| 32 | } else { |
|
| 33 | $this->setupDateTimeObjects($this->generateDateTime($this->year, 3, $p)->modify("+1 day")); |
|
| 34 | } |
|
| 35 | } |
|
| 36 | ||
| 37 | /** |
|
| 38 | * Deel het jaartal door 19, neem de rest, en tel er 1 bij op (zoals Dionysius). Noem dit getal G. Voor het jaar 1991 geldt G = 16. |
|
| 39 | * |
|
| 40 | * @return int |
|
| 41 | */ |
|
| 42 | protected function calculateGNumber() |
|
| 43 | { |
|
| 44 | return ($this->year % 19) + 1; |
|
| 45 | } |
|
| 46 | ||
| 47 | /** |
|
| 48 | * Geheeldeel het jaartal door 100 en tel daar 1 bij op. Noem dit getal C. Voor het jaar 1991 geldt C = 20. |
|
| 49 | * |
|
| 50 | * @return int |
|
| 51 | */ |
|
| 52 | protected function calculateCNumber() |
|
| 53 | { |
|
| 54 | return (int)floor($this->year / 100) + 1; |
|
| 55 | } |
|
| 56 | ||
| 57 | /** |
|
| 58 | * Vermenigvuldig C met 3, geheeldeel het resultaat door 4 en trek er 12 van af. Noem dit getal X. Voor de twintigste en eenentwintigste eeuw geldt X = 3. |
|
| 59 | * |
|
| 60 | * @param int $c |
|
| 61 | * @return float |
|
| 62 | */ |
|
| 63 | protected function calculateXNumber(int $c) |
|
| 64 | { |
|
| 65 | return (($c * 3) / 4) - 12; |
|
| 66 | } |
|
| 67 | ||
| 68 | /** |
|
| 69 | * Neem 8 maal C, tel er 5 bij op, geheeldeel dit door 25 en trek er 5 vanaf. Noem dit getal Y. Voor de twintigste en eenentwintigste eeuw geldt: Y = 1. |
|
| 70 | * |
|
| 71 | * @param int $c |
|
| 72 | * @return float |
|
| 73 | */ |
|
| 74 | protected function calculateYNumber(int $c) |
|
| 75 | { |
|
| 76 | return ((($c * 8) + 4) / 25) - 5; |
|
| 77 | } |
|
| 78 | ||
| 79 | /** |
|
| 80 | * Vermenigvuldig het jaartal met 5, geheeldeel de uitkomst door 4, trek er X en 10 vanaf, en noem dit getal Z. Voor 1991 geldt: Z = 2475. |
|
| 81 | * |
|
| 82 | * @param int $x |
|
| 83 | * @return float |
|
| 84 | */ |
|
| 85 | protected function calculateZNumber(int $x) |
|
| 86 | { |
|
| 87 | return ((($this->year * 5) / 4) - $x) - 10; |
|
| 88 | } |
|
| 89 | ||
| 90 | /** |
|
| 91 | * 11 maal G + 20 + Y. Trek daarvan X af, geheeldeel het resultaat door 30 en noem de rest E. Als E gelijk is aan 24, of als E gelijk is aan 25 en het gulden getal is groter dan 11, tel dan 1 bij E op. De Epacta voor 1991 is 14. |
|
| 92 | * |
|
| 93 | * @param int $x |
|
| 94 | * @return float |
|
| 95 | */ |
|
| 96 | protected function calculateENumber(int $g, int $y, int $x) |
|
| 97 | { |
|
| 98 | $e = (((($g * 11) + 20) + $y) - $x) % 30; |
|
| 99 | ||
| 100 | if (($e === 24) || ($e === 25 && $g > 11)) { |
|
| 101 | $e++; |
|
| 102 | } |
|
| 103 | ||
| 104 | return $e; |
|
| 105 | } |
|
| 106 | ||
| 107 | /** |
|
| 108 | * Trek E af van 44. Noem dit getal N. Als N kleiner is dan 21, tel er dan 30 bij op. Voor 1991 geldt: N = 30 |
|
| 109 | * |
|
| 110 | * @param int $e |
|
| 111 | * |
|
| 112 | * @return int |
|
| 113 | */ |
|
| 114 | protected function calculateNNumber(int $e) |
|
| 115 | { |
|
| 116 | $n = 44 - $e; |
|
| 117 | ||
| 118 | if ($n < 21) { |
|
| 119 | $n += 30; |
|
| 120 | } |
|
| 121 | ||
| 122 | return $n; |
|
| 123 | } |
|
| 124 | ||
| 125 | /** |
|
| 126 | * Tel Z en N op. Geheeldeel het resultaat door 7 en trek de rest af van N+7. Noem dit getal P. Voor 1991 geldt: P = 31. |
|
| 127 | * |
|
| 128 | * @param int $z |
|
| 129 | * @param int $n |
|
| 130 | * @return int |
|
| 131 | */ |
|
| 132 | protected function calculatePNumber(int $z, int $n) |
|
| 133 | { |
|
| 134 | return ($n + 7) - (($z + $n) % 7); |
|
| 135 | } |
|
| 136 | ||
| 137 | /** |
|
| 138 | ||
| 139 | ||
| 140 | Paasdatum: Als P groter is dan 31, trek er dan 31 vanaf, en de paasdatum valt in april. Anders is de paasdag P in maart. Zo wordt voor 1991 gevonden 31 maart. |
|
| 141 | */ |
|
| 142 | } |
|
| 143 | ||