-
- /**
- * Compute eastern for selected year
- *
- * @param string $year The eastern year
- *
- * @return DateTime The eastern date
- */
- private function getEastern(string $year): \DateTime {
- //Set static
- static $data = null;
-
- //Check if already computed
- if (isset($data[$year])) {
- //Return computed eastern
- return $data[$year];
- //Check if data is null
- } elseif (is_null($data)) {
- //Init data array
- $data = [];
- }
-
- $d = (19 * ($year % 19) + 24) % 30;
-
- $e = (2 * ($year % 4) + 4 * ($year % 7) + 6 * $d + 5) % 7;
-
- $day = 22 + $d + $e;
-
- $month = 3;
-
- if ($day > 31) {
- $day = $d + $e - 9;
- $month = 4;
- } elseif ($d == 29 && $e == 6) {
- $day = 10;
- $month = 4;
- } elseif ($d == 28 && $e == 6) {
- $day = 18;
- $month = 4;
- }
-
- //Store eastern in data
- return ($data[$year] = new \DateTime(sprintf('%04d-%02d-%02d', $year, $month, $day)));
- }