计算下一个X周的周开始/结束日期

时间:2012-08-22 07:45:23

标签: php date time

我正在尝试在PHP中构建一个函数,具体取决于日期将给我

本周(星期一)20/8/12至26/8/12

下周+ 1(星期一)27/8/12至02/9/12

在2012年9月9日至9月9日的第二周(周一至周日)

之后

下周+3(星期日)

下周+4(星期日)

下周+ 5(星期一)

我尝试过使用以下内容,但有什么更清洁吗?

$week0_mon = date("Y-m-d", strtotime(date("Y").'W'.date('W')."1"));
$week0_sun = date("Y-m-d", strtotime(date("Y").'W'.date('W')."7"));

$week1_mon = date("Y-m-d", strtotime(date("Y-m-d", strtotime($week0_mon)) . " +1 week"));
$week1_sun = date("Y-m-d", strtotime(date("Y-m-d", strtotime($week0_sun)) . " +1 week"));

echo $week0_mon.' to '.$week0_sun.'<br />';
echo $week1_mon.' to '.$week1_sun.'<br />';

3 个答案:

答案 0 :(得分:1)

也许这会回答你的问题,它会计算上一个星期一并从这里开始一次添加一周。只需修改for

即可
$dOffsets = array("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
$prevMonday = mktime(0,0,0, date("m"), date("d")-array_search(date("l"),$dOffsets), date("Y"));
$oneWeek = 3600*24*7;$toSunday = 3600*24*6;

for ($i=0;$i<= 5;$i++)
{
    echo "Week +",$i," (mon-sun) ",
            date("d/m/Y",$prevMonday + $oneWeek*$i)," to ",
            date("d/m/Y",$prevMonday + $oneWeek*$i + $toSunday),"<br>";
}

这给了我

Week +0 (mon-sun) 20/08/2012 to 26/08/2012
Week +1 (mon-sun) 27/08/2012 to 02/09/2012
Week +2 (mon-sun) 03/09/2012 to 09/09/2012
Week +3 (mon-sun) 10/09/2012 to 16/09/2012
Week +4 (mon-sun) 17/09/2012 to 23/09/2012
Week +5 (mon-sun) 24/09/2012 to 30/09/2012

答案 1 :(得分:0)

我调整了@ Wr1t3r的答案,给出了正确的日期范围,如下所示:

function plus_week($addWeek=0){
    $last_monday_timestamp=strtotime('-'.(date('N')-1).' days');
    if($addWeek!=0){
        if($addWeek>0) $addWeek='+'.$addWeek;
        $last_monday_timestamp=strtotime($addWeek.' week', $last_monday_timestamp);
    }
    $end_week_timestamp = strtotime ('+6 days', $last_monday_timestamp);
    return date('d/m/y', $last_monday_timestamp).' to '.date('d/m/y', $end_week_timestamp);
}

日期('N')将给工作日数字mon-sun(1-7),所以如果我们从中减去1,我们知道回到上个星期一的天数。或者我们可以使用strtotime('last lastday')。 但是如果我们目前在星期一,这种方式可以确保我们不会回到上周一。

星期一= 1所以(1-1 = 0)-0天=今天
星期五= 5所以(5-1 = 4)-4天=星期一
SUNDAY = 7(如果我们使用'w'则不是0)所以(7-1 = 6)-6天=星期一(不是明天)

我也调整了这个来做负数周数。

答案 2 :(得分:-1)

我是这样做的。我不确定它是不是你想要的。

function plus_week($addWeek){
    $date = date("d.m.Y",time());
    $newdate = strtotime ( '+'.$addWeek.' week' , strtotime ( $date ) ) ;
    $newdate = date ( 'd/m/y' , $newdate );
    return $newdate;
}

for($i = 1; $i < 7; $i++){
    echo "Following week+".$i." ".plus_week($i)." to ".plus_week($i+1)."<br/>";
}

从这里你会得到这样的答案:

在2012年8月29日至2012年9月5日之后的一周+ 1月

下周+ 2 05/09/12至12/09/12

在第3周12月12日至2012年9月19日

之后

下周+ 4 19/09/12至26/09/12

下周+ 5 26/09/12至2012年10月3日

下周+ 6 03/10/12至10/10/12