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

允许在 1582 年至 1752 年期间根据格里高利历计算复活节日期,当设置为 CAL_EASTER_ROMAN 时。有关更多有效常量,请参见 日历常量

返回值

给定 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 个说明

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
22 年前
此外,请注意,东正教有时会使用不同的复活节日期。例如,请查看 <http://webexhibits.org/calendars/calendar-christian-easter.html>。 还要注意,复活节的日期可能会发生变化,例如,各教会可能将来会决定统一日期。
To Top