W3docs

easter_days()

Узнайте, как использовать функцию easter_days() в PHP для вычисления числа дней после 21 марта, на которое приходится Пасха в заданном году.

Введение

Добро пожаловать в наше руководство по вычислению даты Пасхи с помощью PHP. Мы покажем, как определить дату для любого заданного года и реализовать это в ваших проектах. Мы рассмотрим историю Пасхи и математические вычисления, лежащие в основе определения её даты. По завершении этого руководства вы получите полное представление о том, как вычислять дату Пасхи с помощью PHP.

Что такое Пасха?

Пасха — христианский праздник, отмечающий воскресение Иисуса Христа из мёртвых. Это один из важнейших праздников в христианском календаре, который отмечается по всему миру. Дата Пасхи меняется каждый год и определяется на основе ряда сложных вычислений.

История Пасхи

Пасха празднуется христианами уже более 2000 лет. Точное происхождение праздника не установлено, однако считается, что он ведёт своё начало от языческих весенних торжеств. Полагают, что название «Easter» произошло от древнеанглийского слова «ēastre» — языческого праздника, посвящённого весеннему равноденствию.

В христианской традиции Пасха знаменует воскресение Иисуса Христа из мёртвых. Согласно Библии, Иисус был распят в Страстную пятницу и воскрес три дня спустя — в Пасхальное воскресенье. Пасха отмечается в воскресенье после первого полнолуния, наступающего после весеннего равноденствия, и обычно приходится на период с 22 марта по 25 апреля.

Вычисление даты Пасхи

Дата Пасхи определяется рядом сложных вычислений, основанных на лунных и солнечных циклах. Эти расчёты были впервые разработаны Никейским собором в 325 году нашей эры и совершенствовались на протяжении столетий.

Дата Пасхи вычисляется по следующей формуле:

a = year mod 19
b = year mod 4
c = year mod 7
d = (19 * a + 24) mod 30
e = (2 * b + 4 * c + 6 * d + 5) mod 7
f = d + e + 22

Если f меньше или равно 31, Пасха приходится на f марта. Если f больше 31, Пасха приходится на f - 31 апреля.

Примечание: этот классический алгоритм работает для большинства годов, однако имеет известные граничные случаи (например, 1954, 1981, 2049, 2079, 2099), при которых результат может отличаться на один день. Для производственных приложений рекомендуется использовать специализированную библиотеку для работы с календарём или реализовать полный набор правил григорианской коррекции.

Использование PHP для вычисления даты Пасхи

Теперь, когда мы познакомились с историей и вычислениями, лежащими в основе даты Пасхи, посмотрим, как использовать PHP для её расчёта в любом заданном году. Начнём с создания PHP-функции, которая принимает год в качестве аргумента и возвращает дату Пасхи для этого года.

Функция выполняет следующие шаги:

  1. Вычисляет остатки a, b и c на основе входного года.
  2. Вычисляет промежуточные значения d и e по формулам лунного и солнечного цикла.
  3. Определяет f — смещение дня от 22 марта.
  4. Преобразует f в месяц и день, затем форматирует результат с помощью DateTime. (Смотрите date_date_set() и date_format() для ознакомления с базовыми вспомогательными функциями работы с датами.)

PHP-код для вычисления даты Пасхи

<?php

function get_easter_date($year) {
  $a = $year % 19;
  $b = $year % 4;
  $c = $year % 7;
  $d = (19 * $a + 24) % 30;
  $e = (2 * $b + 4 * $c + 6 * $d + 5) % 7;
  $f = $d + $e + 22;
  if ($f <= 31) {
    $month = 3;
    $day = $f;
  } else {
    $month = 4;
    $day = $f - 31;
  }
  // Use DateTime for modern object-oriented PHP (mktime is legacy, not strictly deprecated)
  $date = new DateTime();
  $date->setDate($year, $month, $day);
  return $date->format('Y-m-d');
}

echo get_easter_date(2024); // Outputs: 2024-03-31

Встроенная функция easter_days()

В заголовке этой главы упоминается нативная функция PHP easter_days(), которая является стандартным способом вычисления Пасхи в production-коде. Эта функция возвращает количество дней после 21 марта, на которое приходится Пасха в заданном году. Она автоматически обрабатывает все календарные коррекции и граничные случаи, устраняя необходимость в ручных вычислениях по модулю.

echo easter_days(2024); // Returns 10 (March 21 + 10 days = March 31)

Хотя пользовательский алгоритм выше полезен в учебных целях, для реальных приложений рекомендуется использовать easter_days() благодаря её точности, простоте и встроенной поддержке високосных годов и коррекций григорианского календаря.

Чтобы преобразовать смещение в конкретную календарную дату, объедините easter_days() с базовой датой 21 марта:

$year = 2024;
$easter = new DateTime("$year-03-21");
$easter->modify('+' . easter_days($year) . ' days');
echo $easter->format('Y-m-d'); // Outputs: 2024-03-31

PHP также предоставляет тесно связанную функцию easter_date(), которая возвращает дату Пасхи непосредственно в виде Unix-временной метки, а не смещения в днях.

Связанные функции

  • easter_date() — получить дату Пасхи в виде Unix-временной метки.
  • checkdate() — проверить корректность григорианской даты.
  • date_create() — создать новый объект DateTime.
  • date_format() — форматировать DateTime для вывода.

Практика

Практика
Каково назначение функции easter_days() в PHP?
Каково назначение функции easter_days() в PHP?
Was this page helpful?