Неправильная дата пасхи в php - PullRequest
2 голосов
/ 25 января 2012

Я пытаюсь вычислить пасхальную дату в 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 ]

6 голосов
/ 25 января 2012

Ваш формат даты неправильный.t - количество дней в данном месяце (апрель = 30).Используйте d для дня месяца:

echo(date("d.m.Y", easter_date(2012)).'<br>');
// will output: 08.04.2012

кстати: православная дата Пасхи 15 апреля этого года.

4 голосов
/ 04 апреля 2012

Если вы хотите использовать класс DateTime, следующее даст вам объект DateTime, установленный на Пасху. Используйте 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

Timezone

Установка часового пояса необходима только тогда, когда часовой пояс по умолчанию неправильный. Должен быть установлен позже, так как он игнорируется в конструкторе, когда предоставляется метка времени Unix.

В противном случае конструктор DateTime может выдавать неправильную дату (например, 07.04.2012 22: 00 для 2012 года вместо 08.04.2012 00: 00 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...