Mid-Atlantic Developer Conference - Call for Speakers

easter_days

(PHP 4, PHP 5, PHP 7)

easter_days Получение количества дней между 21 марта и Пасхой в заданном году

Описание

int easter_days ([ int $year = date("Y") [, int $method = CAL_EASTER_DEFAULT ]] )

Возвращает количество дней между 21 марта и Пасхой в заданном году. Если год не указан, расчет будет произведен для текущего года.

Эту функцию можно использовать вместо easter_date() для расчета даты Пасхи для дат, выходящих за рамки диапазона меток времени Unix (с 1970 по 2037 годы).

Дата Пасхального дня была введена Консулом Никеи в 325 году до н.э. Это первое воскресенье, следующее за первым полнолунием после весеннего равноденствия. Днем весеннего равноденствия принято считать 21 марта, так что расчет дня Пасхи сводится к определению даты полнолуния и следующего за ней воскресенья. Используемый здесь алгоритм введен Дионисием Малым в 532 году. В Юлианском летоисчислении (до 1753 года) для отслеживания фаз луны использовался простой 19-летний цикл. В Грегорианском календаре (годы после 1753 - разработан Христофором Клавиусом и Алоизием Лилиусом и введен Папой Григорием XIII в октябре 1582г., а в Великобритании и ее колониях в сентябре 1752г.) было добавлено 2 поправочных коэффициента увеличивающих точность расчета дат.

Список параметров

year

Год, положительное число. Если не задан, используется текущий год в соответствии с локальным временем сервера.

method

Позволяет расcчитать Пасхальные даты, основываясь на Григорианском календаре для 1582 - 1752 годов, если установить CAL_EASTER_ROMAN. См. список констант календаря, чтобы узнать о всех допустимых константах.

Возвращаемые значения

Количество дней между 21 марта и Пасхальным воскресеньем в заданном году year.

Примеры

Пример #1 Пример использования easter_days()

<?php

echo easter_days(1999);        // 14, т.e. April 4
echo easter_days(1492);        // 32, т.e. April 22
echo easter_days(1913);        //  2, т.e. March 23

?>

Смотрите также

  • easter_date() - Метка времени Unix соответствующая полуночи на Пасху в заданном году

add a note add a note

User Contributed Notes 4 notes

up
1
trillian at vollbio dot de
1 year ago
// example for easter_date() replacement:
function my_easter_date($year) {
  return strtotime(
    '+' . easter_days($year) . ' day',
    mktime(0, 0, 0, 3, 21, $year)
  );
}

// test
echo date('Y-m-d', my_easter_date(2016));
// result: 2016-03-27
up
1
p dot rijt at caesar dot nl
2 years ago
This function returns an array of timestamp corresponding to Dutch National holidays. Liberation Day (Bevrijdingsdag) is added as a National holiday once every five years (2000, 2005, 2010, ...).

<?php
function getHolidays($year = null) {
    if (
$year === null) {
       
$year = intval(date('Y'));
    }
   
   
$easterDate  = easter_date($year);
   
$easterDay   = date('j', $easterDate);
   
$easterMonth = date('n', $easterDate);
   
$easterYear   = date('Y', $easterDate);
 
   
$holidays = array(
       
// Nieuwjaarsdag
       
mktime(0, 0, 0, 11$year), 
       
// 1e Kerstdag
       
mktime(0, 0, 0, 12, 25, $year), 
       
// 2e Kerstdag
       
mktime(0, 0, 0, 12, 26, $year)
    );
     
   
// Bevrijdingsdag
   
if (($year % 5) == 0) {
       
$holidays[] = mktime(0, 0, 0, 5, 5, $year); 
    }
   
   
// Koninginnedag (< 2014) of Koningsdag (>= 2014).
    // Verplaats naar zaterdag als het valt op zondag.
   
if ($year <= 2013) { // Koninginnedag <= 2013
       
if (date('w', mktime(0, 0, 0, 4, 30, $year)) == 0) { // Op zondag?
           
$holidays[] = mktime(0, 0, 0, 4, 29, $year);  // Verplaats naar zaterdag
       
} else {
           
$holidays[] = mktime(0, 0, 0, 4, 30, $year);  // Koninginnedag
       
}
    } else {
// Koningsdag > 2014
       
if (date('w', mktime(0, 0, 0, 4, 27, $year)) == 0) { // Op zondag?
           
$holidays[] = mktime(0, 0, 0, 4, 26, $year);  // Verplaats naar zaterdag
       
} else {
           
$holidays[] = mktime(0, 0, 0, 4, 27, $year);  // Koningsdag
       
}
    }
   
   
// Onderstaande dagen hebben een datum afhankelijk van Pasen
    // Goede Vrijdag (= pasen - 2)
   
$holidays[] = strtotime('-2 days', mktime(0, 0, 0, $easterMonth, $easterDay$easterYear));
   
// 1e Paasdag
   
$holidays[] = mktime(0, 0, 0, $easterMonth, $easterDay$easterYear);
   
// 2e Paasdag (= pasen +1)
   
$holidays[] = strtotime('+1 days', mktime(0, 0, 0, $easterMonth, $easterDay$easterYear));
   
// Hemelvaartsdag (= pasen + 39)
   
$holidays[] = strtotime('+39 days', mktime(0, 0, 0, $easterMonth, $easterDay$easterYear));
   
// 1e Pinksterdag (= pasen + 49)
   
$holidays[] = strtotime('+49 days', mktime(0, 0, 0, $easterMonth, $easterDay$easterYear));
   
// 2e Pinksterdag (= pasen + 50)
   
$holidays[] = strtotime('+50 days', mktime(0, 0, 0, $easterMonth, $easterDay$easterYear));

   
sort($holidays);
 
    return
$holidays;
}

$holidays = getHolidays(2014);

foreach (
$holidays as $holiday) {
    echo
date('d-M-Y', $holiday) . '<br>';
}
?>
up
1
martin at diers dot cc
16 years ago
This function appears to be Britanno-centric. When attempting to calculate the Gregorian date for Easter for years prior to 1753, the function returns the number or days since March 21st in the Julian Calendar, even though the Gregorian system was in effect in the rest of Europe since 1582. If you wish to calculate the date of easter for a Gregorian date from 1582 onward, use the following function, which duplicates the funcionality of easter_days:

<?php
   
function easter_days2($year) {
       
#First calculate the date of easter using Delambre's algorithm.
       
$a = $year % 19;
       
$b = floor($year / 100);
       
$c = $year % 100;
       
$d = floor($b / 4);
       
$e = $b % 4;
       
$f = floor(($b + 8) / 25);
       
$g = floor(($b - $f + 1) / 3);
       
$h = (19 * $a + $b - $d - $g + 15) % 30;
       
$i = floor($c / 4);
       
$k = $c % 4;
       
$l = (32 + 2 * $e + 2 * $i - $h - $k) % 7;
       
$m = floor(($a + 11 * $h + 22 * $l) / 451);
       
$n = ($h + $l - 7 * $m + 114);
       
$month = floor($n / 31);
       
$day = $n % 31 + 1;

       
#Return the difference between the JulianDayCount for easter and March 21'st
        #of the same year, in order to duplicate the functionality of the easter_days function
       
return GregorianToJD($month, $day, $year) - GregorianToJD(3,21,$year);
    }
?>
up
1
ian at eiloart dot com-NOSPAM
16 years ago
Also, be aware that the eastern orthodox churches sometimes have different dates for easter. See, for example <http://webexhibits.org/calendars/calendar-christian-easter.html>. And note that the dates of easter a subject to change,  for example, the churches might some day decide to unify the dates.
To Top