2012-08-22 81 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天=星期一(不是明天)

我也調整了這個做負數週數。

相關問題