Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在日期范围之间动态添加天数间隔_Php_Datetime - Fatal编程技术网

Php 如何在日期范围之间动态添加天数间隔

Php 如何在日期范围之间动态添加天数间隔,php,datetime,Php,Datetime,我想打印间隔内给定日期范围内的所有日期。但如果有周六,我会增加2天,如果有周日,我会增加1天 对于ex- 1) 2018年7月30日是我的开始日期。再加上5天 2) 2018年8月6日是第二个日期,比2018年8月6日增加5天,因此可能是2018年8月11日,但2018年8月11日和2008年12月12日是周六和周日,因此增加两天,下一个日期将是 3) 2018年8月13日是我的第三次约会。。。2018年8月13日+5天=2018年8月18日,但2018年8月18日和2018年8月19日是周六和

我想打印间隔内给定日期范围内的所有日期。但如果有周六,我会增加2天,如果有周日,我会增加1天

对于ex-

1) 2018年7月30日是我的开始日期。再加上5天

2) 2018年8月6日是第二个日期,比2018年8月6日增加5天,因此可能是2018年8月11日,但2018年8月11日和2008年12月12日是周六和周日,因此增加两天,下一个日期将是

3) 2018年8月13日是我的第三次约会。。。2018年8月13日+5天=2018年8月18日,但2018年8月18日和2018年8月19日是周六和周日,因此再增加2天

4) 2018年8月20日是我的第四次约会……就像怀斯一样

5) 2018年8月27日是我的最后一天,因为这是我的结束日期

6) 完成

Plz帮助我实现我的预期产出

Array
(
    [0] => Array
        (
            [month_year] => 30/07/2018
        )

    [1] => Array
        (
            [month_year] => 06/08/2018
        )

    [2] => Array
        (
            [month_year] => 13/08/2018
        )

    [3] => Array
        (
            [month_year] => 20/08/2018
        )

    [4] => Array
        (
            [month_year] => 27/08/2018
        )
)
预期产出

Array
(
    [0] => Array
        (
            [month_year] => 30/07/2018
        )

    [1] => Array
        (
            [month_year] => 06/08/2018
        )

    [2] => Array
        (
            [month_year] => 13/08/2018
        )

    [3] => Array
        (
            [month_year] => 20/08/2018
        )

    [4] => Array
        (
            [month_year] => 27/08/2018
        )
)
下面是我的代码

public function testdate(){
            $date_from = new \DateTime("7/30/2018");
            $date_to = new \DateTime("8/27/2018");
            $interval = new \DateInterval("P5D");
            $dates = new \DatePeriod($date_from, $interval, $date_to);
            $out = array();
            if (!empty($dates)) {
                foreach($dates as $dt) {
                    $curre = $dt->format('D');
                    if($curre == 'Sat'){
                        $dt->add(new \DateInterval('P2D'));                       
                    }
                    if($curre == 'Sun'){
                        $dt->add(new \DateInterval('P1D'));
                    }
                    $out[] = array(
                            'month_year' => $dt->format('d/m/Y')
                    ); 
                    //print_r($out);exit;                                     
                }
            }  
            '<pre>';
            //$out = array_reverse($out);
            print_r($out); 
            '</pre>'; 
            exit;           
        }
公共函数testdate(){
$date_from=new\DateTime(“2018年7月30日”);
$date_to=新\日期时间(“2018年8月27日”);
$interval=new\DateInterval(“P5D”);
$dates=new\DatePeriod($date\u from,$interval,$date\u to);
$out=array();
如果(!空($dates)){
foreach(日期为$dt){
$curre=$dt->format('D');
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
如果($curre=='Sat'){
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
$dt->add(new\DateInterval('P2D'));
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
} 如果($curre=='Sun'){
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
$dt->add(new\DateInterval('P1D'));
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
} $out[]=数组( 'month\u year'=>$dt->格式('d/m/Y')
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
); //打印($out);退出; } } '';
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
//$out=阵列_反向($out); 打印(输出); '';
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
出口 }
如果有一些非标准的要求,我宁愿放弃使用
\DatePeriod
,而使用
do…while
循环。大概是这样的:

函数日期之间(\DateTime$date\u from、\DateTime$date\u to){
//仅处理日期时始终重置时间
$date\u from->setTime(0,0);
$date\u to->setTime(0,0);
$dates_between=[];
$current\u dt=$date\u from;
做{
$dates_介于[]之间=[
“月\年”=>$current\u dt->格式('d/m/Y'),
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
]; $current_dt->add(new\DateInterval('P5D');
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
如果($current_dt->format('D')='Sat'){
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
$current_dt->add(new\DateInterval('P2D');
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
} elseif($current_dt->format('D')='Sun')){
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
$current_dt->add(new\DateInterval('P1D'));
function dates_between(\DateTime $date_from, \DateTime $date_to) {
    // always reset the time when working only with dates
    $date_from->setTime(0, 0);
    $date_to->setTime(0, 0);

    $dates_between = [];
    $current_dt = $date_from;
    do {
        $dates_between[] = [
            'month_year' => $current_dt->format('d/m/Y'),
        ];

        $current_dt->add(new \DateInterval('P5D'));

        if ($current_dt->format('D') === 'Sat') {
            $current_dt->add(new \DateInterval('P2D'));
        }
        elseif ($current_dt->format('D') === 'Sun') {
            $current_dt->add(new \DateInterval('P1D'));
        }
    } while ($current_dt <= $date_to);

    return $dates_between;
}

print_r(
    dates_between(
        new \DateTime('7/30/2018'),
        new \DateTime('8/27/2018')
    )
);
} }而($当前