как получить дату на прошлой неделе (вторник или любой другой день) в php?

Я думаю, что это возможно, но я не могу придумать правильный алгоритм.

То, что я хотел сделать, было:

Если сегодня понедельник 2 февраля 2009 года, как я узнаю дату вторника прошлой недели? Используя тот же код через 2 дня, я найду ту же дату вторника прошлой недели, когда текущая дата будет в среду, feb 4 2009.

Related of "как получить дату на прошлой неделе (вторник или любой другой день) в php?"

Я знаю, что есть уже принятый ответ, но imho он не отвечает второму требованию, которое было предложено. В приведенном выше случае strtotime даст вчера, если будет использоваться в среду. Итак, чтобы быть точным, вам все равно нужно проверить это:

$tuesday = strtotime('last Tuesday'); // check if we need to go back in time one more week $tuesday = date('W', $tuesday)==date('W') ? $tuesday-7*86400 : $tuesday; 

Как отметил Давиль в своем комментарии, это был мой быстрый выстрел. Вышеуказанный расчет будет отключен один раз в год из-за летнего времени. Достаточно хорошее решение:

 $tuesday = date('W', $tuesday)==date('W') ? $tuesday-7*86400+7200 : $tuesday; 

Если вам нужно время, чтобы быть 0: 00h, вам потребуются дополнительные усилия, конечно.

PHP действительно делает это очень просто:

 echo strtotime('last Tuesday'); 

См. Документацию strtotime .

Большинство из этих ответов либо слишком много, либо технически неверны, потому что «прошлый вторник» не обязательно означает вторник с прошлой недели, это просто означает предыдущий вторник, который может быть на той же неделе «сейчас».

Правильный ответ:

 strtotime('tuesday last week') 

Рабочее решение:

 $z = date("Ymd", strtotime("last Saturday")); $z = (date('W', strtotime($z)) == date('W')) ? (strtotime($z)-7*86400+7200) : strtotime($z); print date("Ymd", $z); 
 // test: find last date for each day of the week foreach (array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun') as $day) { print $day . " => " . date('m/d/Y', last_dayofweek($day)) . "\n"; } function last_dayofweek($day) { // return timestamp of last Monday...Friday // will return today if today is the requested weekday $day = strtolower(substr($day, 0, 3)); if (strtolower(date('D')) == $day) return strtotime("today"); else return strtotime("last {$day}"); } 

вы забыли strtotime для второго аргумента даты ('W', $ tuesday) хм.

конвертировать $ tuesday в метку времени до "$ tuesday-7 * 86400 + 7200"

МРЗ.

 <?php $currentDay = date('D'); echo "Today-".$today = date("Ymd"); echo "Yesterday-".$yesterday = date("Ymd",strtotime('yesterday')); echo "Same day last week-".$same_day_last_week = date("Ymd",strtotime('last '.$currentDay)); ?>