2013-06-28 112 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