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

Статус
В этой теме нельзя размещать новые ответы.

Juri

Мой дом здесь!
Заблокирован
Регистрация
5 Окт 2007
Сообщения
1.064
Реакции
200
  • Автор темы
  • Заблокирован
  • #1
В общем суть такова в любой день текущей недели определить дату понедельника и воскресения прошедшей недели.
допустим сегодня мы должны получить 25 и 31 соответственно.
Подскажите, сам что то недопетрю, заранее спасибо
 
Для просмотра ссылки Войди или Зарегистрируйся
знаем сегодняшний день, возвращаемся на неделю назад, вычисляем даты требуемых дней.
 
для таких дел есть удобная функция парсер 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(0, 0, 0, 2, 8, 2010))." last Monday"));
 
  • Нравится
Реакции: Juri
для таких дел есть удобная функция парсер strtotime

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

Я когда-то много на это времени убил, но реального решения к сожалению сейчас не могу вспомнить. Так что вопрос Juri по-прежнему открыт.
 
да там предыдущее воскресенье может быть перед предыдущим понедельником, решение чтоб прошлое воскресенье было бы после прошлого понедельника (или позапрошлого) может быть таким, сначала взять прошедшее воскресенье, а для понедельника отмерить 6 дней назад от взятого воскресенья:
PHP:
$day = mktime(0, 0, 0, 2, 8, 2010);
$last_sunday = strtotime(date("d.m.Y H:i:s", $day)." last Sunday");
$last_monday = mktime(0, 0, 0, date("m", $last_sunday)  , date("d", $last_sunday)-6, date("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 дней назад от взятого воскресенья:

А как взять прошлое воскресенье? А если сегодня воскресенье?

Имхо надо так прямо и проверять - если сейчас такой же день недели, как last - то считать самому. Если нет - брать last Monday.
 
если сегодня воскресенье то значит эта неделя текущая и прошлое воскресенье было на прошлой неделе, ещё вариант без парсера с date("N") - день недели:
PHP:
$day = mktime(0, 0, 0, 2, 11, 2010);
$last_monday = mktime(0, 0, 0, date("m", $day)  , date("d", $day)-date("N", $day)-6, date("Y", $day));
$last_sunday = mktime(0, 0, 0, date("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);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху