определить дату первого и последнего дня прошедшей недели

Тема в разделе "PHP Pro", создана пользователем Juri, 7 фев 2010.

Статус темы:
Закрыта.
  1. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.065
    Симпатии:
    197
    В общем суть такова в любой день текущей недели определить дату понедельника и воскресения прошедшей недели.
    допустим сегодня мы должны получить 25 и 31 соответственно.
    Подскажите, сам что то недопетрю, заранее спасибо
     
  2. Sanuch

    Sanuch

    Регистр.:
    25 май 2009
    Сообщения:
    207
    Симпатии:
    70
  3. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    для таких дел есть удобная функция парсер strtotime парсит даты американского формата и арифметические операции над ними и возвращает результат
    PHP:
    //понедельник прошлой недели
    echo date("Y m d H:i:s"strtotime("last Monday"));
    //воскресенье прошлой недели
    echo date("Y m d H:i:s"strtotime("last Sunday"));
    //понедельник позапрошлой недели
    echo date("Y m d H:i:s"strtotime(date("d.m.Y H:i:s")." last Monday last Monday"));
    //понедельник прошлой недели от заданной даты 2010-02-08
    echo date("Y m d H:i:s"strtotime(date("d.m.Y H:i:s"mktime(000282010))." last Monday"));
    php.net/strtotime
     
    Juri нравится это.
  4. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Все бы хорошо, но strtotime("last Monday") не работает, если сегодня понедельник. Ну вернее неправильно работает, не так, как хотелось бы. Итого "прошлая неделя" у тебя будет иногда перескакивать на "позапрошлую", или наоборот, сжиматься в -1 день.

    Я когда-то много на это времени убил, но реального решения к сожалению сейчас не могу вспомнить. Так что вопрос Juri по-прежнему открыт.
     
  5. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    да там предыдущее воскресенье может быть перед предыдущим понедельником, решение чтоб прошлое воскресенье было бы после прошлого понедельника (или позапрошлого) может быть таким, сначала взять прошедшее воскресенье, а для понедельника отмерить 6 дней назад от взятого воскресенья:
    PHP:
    $day mktime(000282010);
    $last_sunday strtotime(date("d.m.Y H:i:s"$day)." last Sunday");
    $last_monday mktime(000date("m"$last_sunday)  , date("d"$last_sunday)-6date("Y"$last_sunday));
    echo 
    date("Y m d H:i:s"$last_monday);
    echo 
    "<br>";
    echo 
    date("Y m d H:i:s"$last_sunday);
     
  6. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    А как взять прошлое воскресенье? А если сегодня воскресенье?

    Имхо надо так прямо и проверять - если сейчас такой же день недели, как last - то считать самому. Если нет - брать last Monday.
     
  7. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    если сегодня воскресенье то значит эта неделя текущая и прошлое воскресенье было на прошлой неделе, ещё вариант без парсера с date("N") - день недели:
    PHP:
    $day mktime(0002112010);
    $last_monday mktime(000date("m"$day)  , date("d"$day)-date("N"$day)-6date("Y"$day));
    $last_sunday mktime(000date("m"$day)  , date("d"$day)-date("N"$day), date("Y"$day));
    echo 
    date("Y m d H:i:s"$last_monday);
    echo 
    "<br>";
    echo 
    date("Y m d H:i:s"$last_sunday);
     
Статус темы:
Закрыта.