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 现在可以为 null。

示例

示例 #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 条注释

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>';
}
?>
ian at eiloart dot com-NOSPAM
23 年前
此外,请注意,东正教有时对复活节的日期有不同的规定。例如,请参见 <http://webexhibits.org/calendars/calendar-christian-easter.html>。 并请注意,复活节的日期可能会发生变化,例如,教会可能有一天会决定统一日期。
To Top