首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算未来X周的周开始/结束日期

计算未来X周的周开始/结束日期
EN

Stack Overflow用户
提问于 2012-08-22 15:45:23
回答 3查看 777关注 0票数 1

我正在尝试用PHP构建一个函数,根据日期的不同,该函数将提供给我

当前周(周一至周日)12年8月20日至12年8月26日

关注week+1 (星期一)12/8/12到02/9/12

关注week+2 (mon-sun) 12年9月9日至12年9月9日

遵循week+3 (mon-sun)

遵循week+4 (mon-sun)

遵循week+5 (mon-sun)

我试过使用以下方法,但有没有更干净的方法??

代码语言:javascript
运行
复制
$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 />';
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-22 16:02:52

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

代码语言:javascript
运行
复制
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/>";
}

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

关注week+1 29/08/12至05/09/12

关注week+2 05/09/12至12/09/12

关注week+3 12/09/12至19/09/12

关注week+4 19/09/12至26/09/12

关注week+5 26/09/12至03/10/12

关注week+6 03/10/12至10/10/12

票数 -1
EN

Stack Overflow用户

发布于 2012-08-22 16:20:39

也许这会解决你的问题,它会计算前一个星期一,并从这里开始一次添加一周。只需编辑for即可

代码语言:javascript
运行
复制
$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>";
}

这给了我

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2012-08-22 16:24:33

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

代码语言:javascript
运行
复制
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);
}

date('N')将得到工作日的数字mon-sun (1-7),所以如果我们从这个数字中减去1,我们就知道要返回到上周一有多少天。或者我们可以使用strtotime(‘上个星期一’)。但是这种方式确保了我们不会回到上周一,如果我们现在在周一。

Monday=1 so (1-1=0) -0天=今天

Friday=5 so (5-1=4) -4天=星期一

SUNDAY=7 (如果我们使用‘w’,就不是0)所以(7-1=6) -6天=星期一(不是明天)

我还调整了它,使其周数也为负数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12068465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档