2012-08-22 133 views
1

我想建立一个PHP函数,根据日期会给我计算下一个X周周开始/结束日期

目前这周(周一至周日)20/8/12至26/8/12

继周+ 1(周一至周日)27/8/12到12年2月9日

继周+ 2(周一至周日)12年3月9日以09/9/12

下周+ 3(mon-sun)

后续摹周+ 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 />'; 
+0

date('N',$ timestamp);会给你星期一数字星期一(1-7)。所以如果你strtotime(' - '。(date('N',$ timestamp)-1)。'days',$ timestamp);它会将时间戳移回星期一。 – Waygood

回答

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

从此你将得到的答案是这样的:

继周+ 1 29/08/12至05/09/12

继周+ 2 05/09/12至12/9月12日

继周+ 3 12年12月9日至19/09/12

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

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

继周+ 6 12年3月10日至12年10月10日

+0

这将给出当前日期的范围,您需要使用-date('N',$ timestamp)+1来删除星期几数字+1以恢复到星期一。和范围需要+周+周-1(星期一)不(星期一) – Waygood

+0

对不起,应该是-1不+1 +1 – Waygood

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 
+0

+1我喜欢这个,因为你可以改变它计算一周中的任何一天作为你的开始一天。即星期二 - 星期二 – Waygood

+0

当当前日期是在月初(星期一后)时会工作,因为日可能是负的? – Waygood

+1

这个工程在任何时间,即使是负面的日子(Ex Sunday在一个月的开始时间)由于'mktime()'做的工作 – Touki

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')会给星期一数字星期一(1-7),所以如果我们从这里减去1,我们知道有多少天可以回到上一个星期一。或者我们可以使用strtotime('last weekday')。 但是这样确保我们不会回到上周一,如果我们现在在星期一。

星期一= 1,从而(1-1 = 0)-0天=今天
星期五= 5那么(5-1 = 4)-4天=星期一
星期日= 7(不为0,如果我们使用“ (7-1 = 6)-6天=星期一(不是明天)

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

相关问题