PHP Conference Japan 2024

easter_days

(PHP 4, PHP 5, PHP 7, PHP 8)

easter_days取得指定年份復活節在 3 月 21 日之後的第幾天

描述

easter_days(?int $year = null, int $mode = CAL_EASTER_DEFAULT): int

傳回指定年份復活節在 3 月 21 日之後的第幾天。如果未指定年份,則預設為目前年份。

此函式可用來代替 easter_date() 來計算 Unix 時間戳記範圍之外的年份(即 1970 年之前或 2037 年之後)的復活節。

西元 325 年尼西亞公會議將復活節的日期定義為春分當天或之後的第一個滿月後的星期日。春分預設總是在 3 月 21 日,因此計算簡化為確定滿月的日期和隨後的星期日。這裡使用的演算法是大約在西元 532 年由狄奧尼修斯·伊希格斯引入的。在儒略曆下(1753 年之前的年份),使用一個簡單的 19 年週期來追蹤月球的相位。在格里曆下(1753 年之後的年份 - 由克拉維烏斯和利留斯設計,並由教宗格里高利十三世在 1582 年 10 月引入,並在 1752 年 9 月引入英國及其當時的殖民地),加入了兩個校正因子以使週期更加準確。

參數

year

年份,正數。如果省略或為 null,則預設為本地時間的目前年份。

mode

當設定為 CAL_EASTER_ROMAN 時,允許在 1582 年至 1752 年期間根據格里曆計算復活節日期。請參閱 日曆常數 以取得更多有效常數。

傳回值

復活節星期日在給定 year 的 3 月 21 日之後的第幾天。

變更日誌

版本 描述
8.0.0 year 現在可為空值。

範例

範例 1 easter_days() 範例

<?php

echo easter_days(1999); // 14,即 4 月 4 日
echo easter_days(1492); // 32,即 4 月 22 日
echo easter_days(1913); // 2,即 3 月 23 日

?>

參見

  • easter_date() - 取得指定年份復活節當地午夜的 Unix 時間戳記

新增筆記

使用者貢獻的筆記 2 個筆記

7
p dot rijt at caesar dot nl
9 年前
此函式會傳回對應荷蘭國定假日的時間戳記陣列。解放日 (Bevrijdingsdag) 每五年新增為國定假日一次(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(
// 新年元旦
mktime(0, 0, 0, 1, 1, $year),
// 聖誕節
mktime(0, 0, 0, 12, 25, $year),
// 聖誕節次日
mktime(0, 0, 0, 12, 26, $year)
);

// 解放日
if (($year % 5) == 0) {
$holidays[] = mktime(0, 0, 0, 5, 5, $year);
}

// 女王節(< 2014)或國王節(>= 2014)。
// 如果是星期日,則移至星期六。
if ($year <= 2013) { // 女王節 <= 2013
if (date('w', mktime(0, 0, 0, 4, 30, $year)) == 0) { // 星期日?
$holidays[] = mktime(0, 0, 0, 4, 29, $year); // 移至星期六
} else {
$holidays[] = mktime(0, 0, 0, 4, 30, $year); // 女王節
}
} else {
// 國王節 > 2014
if (date('w', mktime(0, 0, 0, 4, 27, $year)) == 0) { // 星期日?
$holidays[] = mktime(0, 0, 0, 4, 26, $year); // 移至星期六
} else {
$holidays[] = mktime(0, 0, 0, 4, 27, $year); // 國王節
}
}

// 以下節日的日期取決於復活節
// 耶穌受難日(= 復活節 - 2)
$holidays[] = strtotime('-2 days', mktime(0, 0, 0, $easterMonth, $easterDay, $easterYear));
// 復活節
$holidays[] = mktime(0, 0, 0, $easterMonth, $easterDay, $easterYear);
// 復活節次日 (= 復活節 + 1)
$holidays[] = strtotime('+1 days', mktime(0, 0, 0, $easterMonth, $easterDay, $easterYear));
// 耶穌升天節 (= 復活節 + 39)
$holidays[] = strtotime('+39 days', mktime(0, 0, 0, $easterMonth, $easterDay, $easterYear));
// 聖靈降臨節 (= 復活節 + 49)
$holidays[] = strtotime('+49 days', mktime(0, 0, 0, $easterMonth, $easterDay, $easterYear));
// 聖靈降臨節次日 (= 復活節 + 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>';
}
?>
0
ian at eiloart dot com-NOSPAM
23 年前
另請注意,東正教教堂的復活節日期有時會不同。例如,請參閱 <http://webexhibits.org/calendars/calendar-christian-easter.html>。並請注意,復活節的日期可能會變更,例如,各教堂將來可能會決定統一日期。
To Top