За последние 24 часа нас посетили 35020 программистов и 1738 роботов. Сейчас ищут 820 программистов ...

А когда же масленица?

Тема в разделе "PHP для новичков", создана пользователем SkyKiller, 5 дек 2011.

  1. SkyKiller

    SkyKiller Активный пользователь

    С нами с:
    1 ноя 2007
    Сообщения:
    166
    Симпатии:
    0
    Адрес:
    Новосибирск
    Всем доброго здравия!

    Столкнулся я тут с несколько нетривиальной задачей: автоматическим вычислением даты начала Масленицы (масленичной недели) для текущего года.

    Есть у меня сайт. На нём, в зависимости от текущей даты, логотип в шапке меняется на праздничный. Например, 31 декабря лого меняется на красивую новогоднюю ёлочку. Однако, это всё проще пареной репы только для переходящих дат. То есть, для тех, которые из года в год празднуются в один и тот же день. А вот с непереходящими (которые надо вычислять каждый год) - наступила у меня полная (_._)

    На данном этапе, мне надо вычислить две даты: Пасху и Масленицу (начало масленичной недели). С Пасхой я справился без проблем - вычисляю её дату по формуле Гаусса:
    PHP:
    1. <?php
    2. function getEasterDay($year) {
    3.     $a = $year % 4;
    4.     $b = $year % 7;
    5.     $c = $year % 19;
    6.     $d = (19 * $c + 15) % 30;
    7.     $e = (2 * $a + 4 * $b - $d + 34) % 7;
    8.     $month = floor(($d + $e + 114) / 31);
    9.     $day = (($d + $e + 114) % 31) + 1;
    10.         //--
    11.     $de = mktime(0, 0, 0, $month, $day + 13, $year);
    12.     return $de;
    13. }
    14. ?>
    Возвращает дату Пасхи в формате UNIX Timestamp. Этот код работает безошибочно. А вот с Масленицей возникла проблема. Масленица предшествует Великому Посту, который длится 6 недель и заканчивается Пасхой. То есть, в принципе, ничего сложного (вроде) - отнять от даты Пасхи 7 недель и всё. Но... Проблема в том, что я не могу додуматься, как учитывать високосный год. Да и вычитание дат у меня, почему-то, не работает...
    Конструкция:
    echo strtotime(getEasterDay(2012), "-7 week");
    Возвращает:
    A non well formed numeric value encountered in /home/u....

    Если кто-то может поделиться готовым и работающим алгоритмом вычисления Масленицы - буду благодарен!
    Спасибо.
     
  2. SkyKiller

    SkyKiller Активный пользователь

    С нами с:
    1 ноя 2007
    Сообщения:
    166
    Симпатии:
    0
    Адрес:
    Новосибирск
    Вопрос неактуален. Разобрался сам.