From f20e37360674d48c164ad95ce0105d7f5f5014ef Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Gertz?= Date: Fri, 8 Mar 2024 02:08:30 +0100 Subject: [PATCH] Add getEastern member function --- Util/IntlUtil.php | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Util/IntlUtil.php b/Util/IntlUtil.php index eb7711f..b37169d 100644 --- a/Util/IntlUtil.php +++ b/Util/IntlUtil.php @@ -84,6 +84,46 @@ class IntlUtil { return $formatter->formatCurrency($number, $currency); } + /** + * Compute eastern for selected year + * + * @param string $year The eastern year + * + * @return DateTime The eastern date + */ + public function getEastern(string $year): \DateTime { + //Set static results + static $results = []; + + //Check if already computed + if (isset($results[$year])) { + //Return computed eastern + return $results[$year]; + } + + $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 ($results[$year] = new \DateTime(sprintf('%04d-%02d-%02d', $year, $month, $day))); + } + /** * Gets number formatter instance matching locale and style. * -- 2.41.0