Код
/* ---------------------------------------------------------------------
* Алгоритм расчёта даты Пасхи для любого года
* Параметры:
* year - год, для которого расчитывается дата Пасхи
* newStyle - флаг, указывающий по старому или новому стилю выдавать дату (по умолчанию: новый стиль)
* Результат:
* дата Пасхи в формате YYYY-MM-DD
* ----------------------------------------------------------------------- */
function calculateEaster ($year, $newStyle = true)
{
$a = $year % 19;
$b = $year % 4;
$c = $year % 7;
$d = (19*$a + 15) % 30;
$e = (2*$b + 4*$c + 6*$d + 6) % 7;
if ($d + $e <= 9)
{
$month = 3;
$day = $d + $e + 22;
}
else
{
$month = 4;
$day = $d + $e - 9;
if ($day == 26)
$day = 19;
}
if (($e == 6) && ($day == 28))
$day = 18;
//--------------------------------------------
if ($newStyle)
{
$daysInMonths = array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$leapYear = ($year % 4 == 0) && (($year % 100 != 0) || ($year % 400 == 0));
if ($leapYear)
$daysInMonths[1]++;
$day += 13; // новый стиль отличается от старого на 13 дней
if ($day > $daysInMonths[$month - 1])
{
$day -= $daysInMonths[$month - 1]);
$month++;
}
}
return $year . "-" . $month . "-" . $day;
}
* Алгоритм расчёта даты Пасхи для любого года
* Параметры:
* year - год, для которого расчитывается дата Пасхи
* newStyle - флаг, указывающий по старому или новому стилю выдавать дату (по умолчанию: новый стиль)
* Результат:
* дата Пасхи в формате YYYY-MM-DD
* ----------------------------------------------------------------------- */
function calculateEaster ($year, $newStyle = true)
{
$a = $year % 19;
$b = $year % 4;
$c = $year % 7;
$d = (19*$a + 15) % 30;
$e = (2*$b + 4*$c + 6*$d + 6) % 7;
if ($d + $e <= 9)
{
$month = 3;
$day = $d + $e + 22;
}
else
{
$month = 4;
$day = $d + $e - 9;
if ($day == 26)
$day = 19;
}
if (($e == 6) && ($day == 28))
$day = 18;
//--------------------------------------------
if ($newStyle)
{
$daysInMonths = array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$leapYear = ($year % 4 == 0) && (($year % 100 != 0) || ($year % 400 == 0));
if ($leapYear)
$daysInMonths[1]++;
$day += 13; // новый стиль отличается от старого на 13 дней
if ($day > $daysInMonths[$month - 1])
{
$day -= $daysInMonths[$month - 1]);
$month++;
}
}
return $year . "-" . $month . "-" . $day;
}