Php 从日期范围中删除周末

Php 从日期范围中删除周末,php,Php,我用它来帮助我,但需要把它变成我的问题 我想计算两个日期之间的天数,然后去掉周末。我如何结合以下两个答案 日期1为2017年10月6日,日期2为2017年10月9日 $date1 = new DateTime(get_sub_field('start_date')); $date2 = new DateTime(get_sub_field('end_date')); $diff = $date2->diff($date1)->format("%a"); echo

我用它来帮助我,但需要把它变成我的问题

我想计算两个日期之间的天数,然后去掉周末。我如何结合以下两个答案

日期1为2017年10月6日,日期2为2017年10月9日

$date1 = new DateTime(get_sub_field('start_date'));
$date2 = new DateTime(get_sub_field('end_date'));

$diff = $date2->diff($date1)->format("%a");
echo $diff;
这样就有3天了。我想让它显示1,因为那里有一个周末。因此,我需要将其与以下内容结合起来:

下一个答案将删除所有周末:

function countDays($year, $month, $ignore) {
    $count = 0;
    $counter = mktime(0, 0, 0, $month, 1, $year);
    while (date("n", $counter) == $month) {
        if (in_array(date("w", $counter), $ignore) == false) {
            $count++;
        }
        $counter = strtotime("+1 day", $counter);
    }
    return $count;
}
echo countDays(2017, 10, array(0, 6)); // 22
10月提供22个工作日


我如何结合这两个答案来显示两个日期之间的天数,但不包括周末?

PHP日期和时间类功能非常强大

我会使用
DateInterval
DatePeriod

$start = new DateTime('2017-10-06');
$end   = new DateTime('2017-10-09');
$interval = DateInterval::createFromDateString('1 day');
$period   = new DatePeriod($start, $interval, $end);

$businessDays = 0;
foreach ($period as $day) {
    // $day is not saturday nor sunday
    if (! in_array($day->format('w'), [0, 6])) {
        $businessDays++;
    }
}

echo $businessDays; // prints 1

该死的-忍者;)@这是一个非常简洁的回答,谢谢。比我在那里看到的任何东西都要好。删除了我的答案,因为它基本上是相同的(几乎完全相同的变量名),因此是多余的;)@您的CD001有一点改进,它没有在每次迭代中创建一个数组,只创建一次。