X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/ca42f395bd7fadae6aa2db553d88a5b9385238f6..f06acce2c1058d581657163417952723ff6d71cd:/Util/IntlUtil.php 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. *