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

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

Что я хотел сделать:

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

Ответы

Ответ 1

Я знаю, что есть уже принятый ответ, но 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, вам потребуются дополнительные усилия, конечно.

Ответ 2

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

echo strtotime('last Tuesday');

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

Ответ 3

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

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

strtotime('tuesday last week')

Ответ 4

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

$z = date("Y-m-d", strtotime("last Saturday"));
$z = (date('W', strtotime($z)) == date('W')) ? (strtotime($z)-7*86400+7200) : strtotime($z);
print date("Y-m-d", $z);

Ответ 5

// 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}");
}

Ответ 6

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

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

MDE.

Ответ 7

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