Php中两个给定日期之间的工作日期

时间:2016-12-22 08:05:42

标签: php

请,我需要这个代码的帮助。我已经在Stakeoverflow中检查了其他人,但它不是可混合的,因此这个问题。我想生成两个日期之间的所有工作/工作日。我找到了一个代码,但它产生了所有的日子,包括周末。如何从列表中消除周末或确保生成的列表仅适用于工作日?

<?php

$start_Date = date('Y-m-d');
$end_Date = date('Y-m-d', strtotime('30 weekdays'));
//echo $start_Date."<br/>";
//echo $end_Date."<br/>";

// Specify the start date. This date can be any English textual format  
$date_from = $start_Date;
$date_from = strtotime($date_from); // Convert date to a UNIX timestamp  

// Specify the end date. This date can be any English textual format  
$date_to = $end_Date;
$date_to = strtotime($date_to); // Convert date to a UNIX timestamp  

// Loop from the start date to end date and output all dates inbetween  
$c = 0;
for ($i = $date_from; $i <= $date_to; $i += 86400) {
    $c++;
    echo $c . "=> " . date("Y-m-d", $i) . '<br />';
}

我希望生成30天,但是使用此代码,我将获得42天。周末已被添加,而不是仅在工作日。

3 个答案:

答案 0 :(得分:2)

只需将其添加到循环中:

$w = date('w',$i);// day of week - Sunday == 0, Saturday == 6
if($w == 0 || $w == 6){
    continue;
}

DEMO

答案 1 :(得分:1)

您可能需要获取星期几,例如日期(“D”),然后在for循环中使用它来检查......这样的事情?:

$Weekends = array("Sat","Sun");
for....
    $DayOfWeek = date("D",$i);
    if(!in_array($DayOfWeek, $Weekend)){
        // increment...
    }

答案 2 :(得分:1)

您的代码几乎只能添加一个if if check in your code

你的代码

for ($i = $date_from; $i <= $date_to; $i += 86400) {
   $c++;
   echo $c . "=> " . date("Y-m-d", $i) . '<br />';
}

请替换那个

for ($i = $date_from; $i <= $date_to; $i += 86400) {
    $day = date("w", $i);
    if($day != 0 && $day!= 6){ // will continue if not Sunday or Saturday
      $c++;
      echo $c . "=> " . date("Y-m-d", $i) . '<br />';
    }
}

您也可以从php.net

获取帮助

由于