Я думаю, что это возможно, но я не могу придумать правильный алгоритм.
То, что я хотел сделать, было:
Если сегодня понедельник 2 февраля 2009 года, как я узнаю дату вторника прошлой недели? Используя тот же код через 2 дня, я найду ту же дату вторника прошлой недели, когда текущая дата будет в среду, feb 4 2009.
Я знаю, что есть уже принятый ответ, но 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)); ?>