Определить четность текущей недели

Тема в разделе "Как сделать...", создана пользователем Vishez, 12 ноя 2014.

  1. Vishez

    Vishez

    Регистр.:
    19 авг 2013
    Сообщения:
    169
    Симпатии:
    81
    Здравствуйте, есть такой вопрос - как рассчитать четность текущей недели на php? При этом отсчет начинается с 1 сентября(а не с 1 января). Соответственно первая неделя будет нечетной. И конечно не всегда 1 сентября будет начинаться с понедельника, это наверное тоже нужно учесть.
     
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    228
    Получить порядковый номер дня недели 1 сентября поможет параметр "w" функции date http://php.net/manual/ru/function.date.php. Вычислить разность в днях между текущей датой и 1 сентября. Внести поправку на порядковый номер дня недели 1 сентября. Дальше делить на 7 и определять четность.

    Или используя параметр "W" сразу оперировать порядковым номером недели в году.
    PHP:
    $curr date_create_from_format('d.m.Y''12.11.2014');
    $base date_create_from_format('d.m.Y''01.09.2014');

    $weeks date_format($curr'W') - date_format($base'W') ;

    // Костыль для дат после нового года
    $weeks = ( $weeks ) ? $weeks 52 $weeks ;

    $w = array("четная""нечетная");
    echo 
    "Дата: "date_format($curr'd.m.Y'), " это "$weeks"-я неделя (".$w[$weeks 2].")";
     
  3. Vishez

    Vishez

    Регистр.:
    19 авг 2013
    Сообщения:
    169
    Симпатии:
    81
    Скрипт выводит следующее "Дата: 05.09.2014 это 0-я неделя (четная)"
    Как я написал в условии задачи - первая неделя учебного года - должна быть нечетной
     
  4. AlgoriVismut

    AlgoriVismut Создатель

    Регистр.:
    10 ноя 2014
    Сообщения:
    11
    Симпатии:
    8
    Что мешает местами поменять?
    array("четная", "нечетная"); =>
    array("нечетная", "четная");
    PHP:
    <?
    $curr date_create_from_format('d.m.Y''12.11.2014');
    $base date_create_from_format('d.m.Y''01.09.2014');

    $weeks date_format($curr'W') - date_format($base'W') ;

    // Костыль для дат после нового года
    $weeks = ( $weeks ) ? $weeks 52 $weeks ;

    $w = array("нечетная""четная");

    echo 
    "Дата: "date_format($curr'd.m.Y'), " это "$weeks"-я неделя (".$w[$weeks 2].")";
     
  5. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    228
    Или перед echo добавить $weeks++ и будет не 0-я неделя а 1-я
    PHP:
    $weeks++;
    echo 
    "Дата: "date_format($curr'd.m.Y'), " это "$weeks"-я неделя (".$w[$weeks 2].")";
     
    Последнее редактирование: 13 ноя 2014
  6. Vishez

    Vishez

    Регистр.:
    19 авг 2013
    Сообщения:
    169
    Симпатии:
    81
    Куда именно добавить? Выложи рабочий код плз, если не сложно
     
  7. AlgoriVismut

    AlgoriVismut Создатель

    Регистр.:
    10 ноя 2014
    Сообщения:
    11
    Симпатии:
    8
    ++$week;
    сработает быстрее, чем
    $week++;

    Проверено лично!)

    PHP:
    $curr date_create_from_format('d.m.Y''12.11.2014');
    $base date_create_from_format('d.m.Y''01.09.2014');

    $weeks date_format($curr'W') - date_format($base'W') ;

    // Костыль для дат после нового года
    $weeks = ( $weeks ) ? $weeks 52 $weeks ;
    ++
    $week;
    $w = array("четная""нечетная");
    echo 
    "Дата: "date_format($curr'd.m.Y'), " это "$weeks"-я неделя (".$w[$weeks 2].")";
     
    Последнее редактирование модератором: 14 ноя 2014
    Vishez нравится это.
  8. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    188
    Симпатии:
    228
    Переменная объявлена как $weeks;
     
    Vishez нравится это.