在php中错误的复活节日期

时间:2012-01-25 09:08:32

标签: php date

我尝试用php计算复活节日期。

echo(date("2012: t.n.Y", easter_date(2012)).'<br>'); // 2012: 30.4.2012

这个日期适用于东正教教堂。但我想要正常的!

我接下来尝试使用easter_days函数:

function easter($year) {
    $date = new DateTime($year.'-03-21');
    $date->add(new DateInterval('P'.easter_days($year).'D'));
    echo $year.": ".$date->format('t.m.Y') . "<br>\n";
}

easter(2012); // 2012: 30.4.2012

经过PHP 5.2.6和5.3.6的测试。我也试图改变时区而没有成功。

2 个答案:

答案 0 :(得分:6)

您的日期格式错误。 t是给定月份的天数(4月= 30)。使用d表示该月的某一天:

echo(date("d.m.Y", easter_date(2012)).'<br>');
// will output: 08.04.2012
顺便说一句:正统的复活节日期是今年4月15日。

答案 1 :(得分:4)

如果要使用DateTime类,以下内容将为DateTime对象设置为Easter。使用easter_date()而不是摆弄easter_days()

function easter($year, $format = 'd.m.Y') {
    $easter = new DateTime('@' . easter_date($year));
    // if your timezone is already correct, the following line can be removed
    $easter->setTimezone(new DateTimeZone('Europe/Berlin'));
    return $easter->format($format);
}

echo easter(2012);              // 08.04.2012
echo easter(2012, 'd.m.Y H:i'); // 08.04.2012 00:00

时区

仅在默认时区错误时才需要设置时区。必须在之后设置,因为在提供unix时间戳时,构造函数会忽略它。

如果省略,DateTime构造函数可能会生成错误的日期(例如 07.04.2012 22:00 ,而不是 08.04.2012 00:00