我尝试用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的测试。我也试图改变时区而没有成功。
答案 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 )