как получить дату прошлой недели (вторник или любой другой день) в php? - PullRequest
16 голосов
/ 02 февраля 2009

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

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

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

Ответы [ 7 ]

16 голосов
/ 02 февраля 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:00, вам, конечно, понадобятся дополнительные усилия.

16 голосов
/ 01 апреля 2014

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

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

strtotime('tuesday last week')
12 голосов
/ 02 февраля 2009

PHP на самом деле делает это действительно легко:

echo strtotime('last Tuesday');

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

2 голосов
/ 07 мая 2009

Рабочий раствор:

$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);
0 голосов
/ 17 октября 2013
<?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));
?>
0 голосов
/ 25 июня 2011
// 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}");
}
0 голосов
/ 07 мая 2009

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

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

МРЗ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...