2010-08-09 73 views
1

喜新的開始日期已經我使用來自另一個問題的代碼 - 它增加了兩個額外的天週末PHP工作日停在週末創造週一

function add_business_days($startdate,$buisnessdays,$holidays,$dateformat){ 
    $i=1; 
    $dayx = strtotime($startdate); 
    while($i < $buisnessdays){ 
    $day = date('N',$dayx); 
    $datex = date('Y-m-d',$dayx); 
    if($day < 6 && !in_array($datex,$holidays))$i++; 
    $dayx = strtotime($datex.' +1 day'); 
    } 
    return date($dateformat,$dayx); 
} 

這個函數形式的情況下endday指定顯示在jquery日曆中的json輸出的一部分 - 它提取startdate和enddate並呈現它。

是否有可能創建一個返回輸出的代碼,以便當它達到一個週末時創建一個結束日期,跳到週一創建一個開始日期然後繼續,直到達到原來的給定結束日期?

x = date('w'); 
if (x != 6) { 
while (x != 6) { 
//start adding days to start date 
} 
} else { 
//create new enddate = current iteration of dates currentdate; 

//then new start (add two days to it to get to monday) currentdate + 2 = newstartdate 
//redo above till you get to original end date 
+0

這個問題很混亂。也許你可以鏈接到前面的問題,以便給我們一些背景。 – Artefacto 2010-08-09 11:50:13

回答

2

我不是100%確定問題/功能真的在做什麼,但(如果我猜對了)這裏有一個想法。

function add_business_days($startdate, $businessdays, $holidays, $dateformat) 
{ 
    $start = new DateTime($startdate); 
    $date = new DateTime($startdate); 
    $date->modify("+{$businessdays} weekdays"); 

    foreach ($holidays as $holiday) { 
     $holiday = new DateTime($holiday); 
     // If holiday is a weekday and occurs within $businessdays of the $startdate 
     if ($holiday->format('N') < 6 && $holiday >= $start && $holiday <= $date) { 
      $date->modify("+1 weekday"); 
     } 
    } 
    return $date->format($dateformat); 
} 

該邏輯基本上將$businessdays平日添加到開始日期;然後檢查日期範圍內的任何假期,如果發生任何假期,則最終日期適當增加。

+0

嗨,謝謝 - 我想我實際上會採取不同的路線,我會使用add_business_days功能,它可以在日曆視圖中工作並隱藏週末 - 同樣的效果和更少的麻煩。 – 2010-08-10 12:36:40