如何在PHP中获取上周(周二或任何其他日期)的日期?

时间:2009-02-02 08:24:31

标签: php date

我认为它可能但我无法为它提出正确的算法。

我想做的是:

如果今天是2009年1月2日星期一,我怎么知道上星期二的日期?在2天之后使用相同的代码,我会找到上周二的相同日期,当前日期是星期三,2009年2月4日。

8 个答案:

答案 0 :(得分:16)

我知道已有一个已接受的答案,但是它不符合要求的第二个要求。在上述情况下,如果在星期三使用,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,当然你需要额外的努力。

答案 1 :(得分:16)

这些答案中的大多数要么太多,要么技术上不正确,因为"上周二"并不一定意味着上周的星期二,它只意味着上一个星期二,这可能是在#34;现在"的同一周内。

正确答案是:

strtotime('tuesday last week')

答案 2 :(得分:12)

PHP实际上让这很容易:

echo strtotime('last Tuesday');

请参阅strtotime文档。

答案 3 :(得分:2)

工作解决方案:

$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);

答案 4 :(得分:0)

你忘了strtotime第二个参数的日期('W',$ tuesday) HMM。

将$ tuesday转换为“$ tuesday-7 * 86400 + 7200”之前的时间戳

MDE。

答案 5 :(得分:0)

// 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 :(得分:0)

<?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));
?>

答案 7 :(得分:0)

请勿使用手动计算,而应使用DateTime对象。它具有适当的实现,并考虑了leap年,yap秒等。

$today = new \DateTime();
$today->modify('tuesday last week');

Modify方法修改相对于日期状态的日期,因此,如果将日期设置为其他日期,则会计算相对于日期的日期。

$date = new \DateTime('2020-01-01');
echo $date->format('Y-m-d'); // 2020-01-01

$date->modify('tuesday last week');
echo $date->format('Y-m-d'); // 2019-12-24