Как получить дату прошлой недели (вторник или любой другой день) в 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));
?>