2013-06-28 32 views
0

我正在嘗試創建接下來的5個工作周的日子(週一至週五,今天除外)的數組。我知道世界各地的工作周不盡相同,但這對我所要做的並不重要。因此,例如,如果今天是星期三,那麼我希望本週的週四和週五以及下週的週一,週二和週三的日期有所不同。PHP - 下個5個工作日的日期?

我想這會工作:

$dates = array(); 

for ($i = 1; $ < 6; $i ++) 
{ 
    $dates[] = date('Y-m-d', strtotime('+ '.$i.' weekday')); 
} 

但今天,它給我:

  • 週一1日
  • 週二第二
  • 週三3
  • 週四4
  • 週日7日!

任何意見讚賞。

感謝

+0

星期五和星期六不見了,你在中東嗎? – DevZer0

+0

我在英國。 – Dan

+0

非常奇怪......'strtotime('昨天+'。$ i。'weekday')'似乎爲我解決了它(之後刪除第一個元素)。必須是PHP中的一個錯誤,然後...... –

回答

5

試試這個

$dates = array(); 
$date = new DateTime(); 

while (count($dates)<5) 
{ 
    $date->add(new DateInterval('P1D')); 
    if ($date->format('N')<6) 
     $dates[]=$date->format('Y-m-d'); 
} 
0

這應該工作:

$dates = array(); 
$i = 0; 

while(true) { 
    $i++; 

    $time = strtotime("+$i days"); 
    $dayOfWeek = date('w', $time); 

    /* 'w' - day of week, numeric, i.e. "0" (Sunday) to "6" (Saturday) */ 
    if(($dayOfWeek == 0) or ($dayOfWeek == 6)) { 
     continue; 
    } 

    $dates[] = date('Y-m-d', $time); 

    if(count($dates) >= 5) { 
     break; 
    } 
} 
0
$now = time(); 
$day = 60*60*24; 
$days = array(); 
for ($i=1; $i<=7; $i++){ 
    $ts = $now + $day*$i;; 
    if (date("N", $ts) < 6){ 
     $days[] = date("l jS", $ts); 
    } 
} 

輸出是:

Array(
    [0] => Monday 1st 
    [1] => Tuesday 2nd 
    [2] => Wednesday 3rd 
    [3] => Thursday 4th 
    [4] => Friday 5th 
) 
+0

雖然他這樣做了非工作日! –

+0

@ tobia.zanarella - 極好的一點!我更新了我的答案。 –

1
function getWeekdayDatesFrom($format, $start_date_epoch, $end_date_epoch, $range) { 

    $dates_arr = array(); 

    if(! $range) { 
     $range = round(abs($start_date_epoch-$end_date_epoch)/86400) + 1; 
    } else { 
     $range = $range + 1; //end date inclusive 
    } 

    $current_date_epoch = $start_date_epoch; 

    for($i = 1; $i <= $range; $i+1) { 

     $d = date('N', $current_date_epoch); 

     if($d <= 5) { // not sat or sun 
      $dates_arr[] = "'".date($format, $current_date_epoch)."'"; 
     } 

     $next_day_epoch = strtotime('+'.$i.'day', $start_date_epoch); 
     $i++; 
     $current_date_epoch = $next_day_epoch; 

    } 

    return $dates_arr; 
} 
+0

這應該回答這個問題,然後一些。使用此功能,您可以聲明返回格式(即Y-m-d),聲明開始日期和結束日期或開始日期和範圍。我現在已經設置了包含結束日期,並且默認情況下它只會返回工作日(可以輕鬆撤消)。我有引號返回的日期以及更容易用於查詢子句。 – wynshaft