English 中文(简体)
如何在 PHP 中获取上周(星期二或其他任何一天)的日期?
原标题:
  • 时间:2009-02-02 08:24:30
  •  标签:

我认为这是可能的,但我想不出正确的算法。

我想要做的是:

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

最佳回答

我知道已經有一個被接受的答案了,但依我之見,它並不符合所要求的第二個要求。在上述情況中,如果在星期三使用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;

正如Davil在他的评论中指出的那样,这有点是我的临时之计。由于夏令时,上述计算每年将偏移一个小时。好的解决方案是:

$tuesday = date( W , $tuesday)==date( W ) ? $tuesday-7*86400+7200 : $tuesday;

如果您需要时间为0:00小时,当然需要额外的努力。

问题回答

大多数回答要么太多了,要么在技术上是不正确的,因为“上个星期二”不一定是上周的星期二,它只是指上一个星期二,它可能在“现在”的同一周内。

答案正确。

strtotime( tuesday last week )

PHP实际上使这变得非常容易:

echo strtotime( last Tuesday );

请查看strtotime文档。

工作方案:

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

不要使用手动计算,改用 DateTime 对象。它具有正确的实现,考虑了闰年、秒等因素。

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

修改方法相对于它的状态修改日期,因此如果您将日期设置为不同的日期,它会计算相对于它的日期。

$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

you forgot strtotime for second argument of date( W , $tuesday) hmm.

将 $tuesday 转换为时间戳,时间戳为 "$tuesday-7*86400+7200" 前面的部分。

I'm sorry, "mde" does not have a meaning in English. Could you please provide more context or information?

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

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




相关问题
热门标签