Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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_Arrays_Date_Datetime_Dateinterval - Fatal编程技术网

Php 如何在两个日期范围之间排除周末

Php 如何在两个日期范围之间排除周末,php,arrays,date,datetime,dateinterval,Php,Arrays,Date,Datetime,Dateinterval,我有一个FromDate和ToDate之间的间隔。 现在我想得到除周末以外的所有约会 如果我的FromDate和ToDate之间有任何周末,则该日期将增加2天周六和周日 在下面的示例中,我计算了2018年7月27日至2018年8月27日之间的所有日期,间隔5天 public function testdate(){ $date_from = new \DateTime("7/27/2018"); $date_to = new \DateTime("

我有一个FromDate和ToDate之间的间隔。 现在我想得到除周末以外的所有约会

如果我的FromDate和ToDate之间有任何周末,则该日期将增加2天周六和周日

在下面的示例中,我计算了2018年7月27日至2018年8月27日之间的所有日期,间隔5天

public function testdate(){
            $date_from = new \DateTime("7/27/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) {
                    $out[] = array(
                        'month_year' => $dt->format('d/m/Y')
                    );
                }
            }  
            '<pre>';
            //$out = array_reverse($out);
            echo print_r($out); 
            '</pre>'; 
            exit;           
        }
在上面的例子中,2018年8月20日之后,下一个日期是2018年8月26日,但2018年8月26日是星期日,因此我们将这个星期日排除在1天之外,下一个日期是现在 2018年8月27日


如果在计算星期六和星期日之间的间隔后出现任何日期,则跳过本周末1天或2天。

为什么标记
cakephp
?一种解决方案是计算开始和结束之间的所有日期,然后测试该日期是否为星期日或星期六,并在这种情况下将其删除。因为我使用的是cakephp 3.x…是的,正确的bt如何执行此操作..我不知道..我更新了代码..我尝试的是您的输出是数组([2018]=>Array([7]=>)…我需要根据我的预期outoutforeach(新的DatePeriod($date_from,$interval,$date_to->add($oneday))获取所有日期($day_num=$day->format(“N”);/*'N'数字天1(周一)到7(周日)/if($day_num<6){/weekday*/$days[$day->format(“Y-m-d”)]=$data;}不,它没有按照我的预期输出工作..请尝试做出一个完整的答案..否则请参阅我的参考代码
Array
(
    [0] => Array
        (
            [month_year] => 27/07/2018
        )

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

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

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

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

    [5] => Array
        (
            [month_year] => 27/08/2018
        )

)
$year = date('Y');
$month = date('n');

$weekend_days = array_filter($allDays[$year][$month], function($d) {
    return (date('N', strtotime(date("Y-m-$d"))) >= 6);
});

$allDays[$year][$month] = array_diff($allDays[$year][$month], $weekend_days);

print_r($allDays);