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

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

Juri

Мой дом здесь!
Регистрация
5 Окт 2007
Сообщения
1.064
Реакции
200
  • Автор темы
  • Заблокирован
  • #1
В общем суть такова в любой день текущей недели определить дату понедельника и воскресения прошедшей недели.
допустим сегодня мы должны получить 25 и 31 соответственно.
Подскажите, сам что то недопетрю, заранее спасибо
 

Sanuch

Гуру форума
Регистрация
24 Май 2009
Сообщения
207
Реакции
70
Для просмотра ссылки Войди или Зарегистрируйся
знаем сегодняшний день, возвращаемся на неделю назад, вычисляем даты требуемых дней.
 

polyetilen

Заблокирован
Регистрация
10 Авг 2006
Сообщения
810
Реакции
475
для таких дел есть удобная функция парсер 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

venetu

Мой дом здесь!
Регистрация
28 Мар 2007
Сообщения
745
Реакции
273
для таких дел есть удобная функция парсер strtotime

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

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

polyetilen

Заблокирован
Регистрация
10 Авг 2006
Сообщения
810
Реакции
475
да там предыдущее воскресенье может быть перед предыдущим понедельником, решение чтоб прошлое воскресенье было бы после прошлого понедельника (или позапрошлого) может быть таким, сначала взять прошедшее воскресенье, а для понедельника отмерить 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);
 

venetu

Мой дом здесь!
Регистрация
28 Мар 2007
Сообщения
745
Реакции
273
сначала взять прошедшее воскресенье, а для понедельника отмерить 6 дней назад от взятого воскресенья:

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

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

polyetilen

Заблокирован
Регистрация
10 Авг 2006
Сообщения
810
Реакции
475
если сегодня воскресенье то значит эта неделя текущая и прошлое воскресенье было на прошлой неделе, ещё вариант без парсера с 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);
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху