选择一周中的某一天,开始向前计数,直到在php中达到设定的限制

选择一周中的某一天,开始向前计数,直到在php中达到设定的限制,php,Php,通过动态设置一周中的某一天(如星期四)对函数进行php挑战,并让函数每天循环(星期五、星期六、星期二),直到满足条件i>0为止。 我已经彻底搜索过了,但找不到匹配的解决方案 请参阅下面的细分: 我的表格: 我的代码: //get duraiton in days function durationInDays($data) { $startDate = date_create($data['startdate']); $endDate = date_create($da

通过动态设置一周中的某一天(如星期四)对函数进行php挑战,并让函数每天循环(星期五、星期六、星期二),直到满足条件i>0为止。 我已经彻底搜索过了,但找不到匹配的解决方案

请参阅下面的细分:


我的表格:

我的代码:

//get duraiton in days

function durationInDays($data) {

    $startDate = date_create($data['startdate']);

    $endDate = date_create($data['enddate']);

    $dateDiff = date_diff($startDate,$endDate);

    $durationInDays = $dateDiff -> format("%a");

    return $durationInDays;
}

//pass duration in days to function to break into weeks and days

function numberOfWeeksAndDays($durationInDays) {
    $days = $numdays%7;
    $weeks = floor($numdays/7);

    return [$weeks, $days];
}


//parse in number of days into function to loop starting from 
//day of week of start date say --thursday for example with a 
//condition to stop loop once numberOfDays is zero.

function extraMassCount($dayOfWeek, $numberOfDays, $countMass) {

        $daysOfTheWeek = [
                            'monday','tuesday','wednesday','thursday','friday','saturday','sunday',
                            'monday','tuesday','wednesday','thursday','friday','saturday','sunday'
                         ];
        $massCountForExtraDays = 0; 

        for ($i = $numberOfDays; $i > 0; $i--) {        

            if($daysOfTheWeek[$i]=='monday')
                $massCountForExtraDays += $countMass[0];

            if($daysOfTheWeek[$i]=='tuesday')
                $massCountForExtraDays += $countMass[1];

            if($daysOfTheWeek[$i]=='wednesday')
                $massCountForExtraDays += $countMass[2];

            if($daysOfTheWeek[$i]=='thursday')
                $massCountForExtraDays += $countMass[3];

            if($daysOfTheWeek[$i]=='friday')
                $massCountForExtraDays += $countMass[4];

            if($daysOfTheWeek[$i]=='saturday')
                $massCountForExtraDays += $countMass[5];

            if($daysOfTheWeek[$i]=='sunday')
                $massCountForExtraDays += $countMass[6];

        }

        return $massCountForExtraDays;

    }
问题:如果$numberOfDays=6,则i=6,函数从星期五开始,而星期五不是开始日期

我的问题:如何实现dayOfWeek参数,以便函数extraMassCount将开始动态计数,例如,如果startdate是星期四,而不是硬编码的开始方式,则为星期四?我希望我的问题是清楚的


也就是说,如表中所示,该函数应该计算每天检查的质量数量,并将它们相加。从startdate开始到enddate。一旦将持续时间分解为周和天,我需要该函数从startdate开始,比如说--周三,然后添加countMass(这是用户使用数据类型int检查的质量计数)以后的每一天。星期四、星期五等–我感谢您的帮助!

像这样,使用相对日期格式和日期时间类

$Date = new DateTime;

//go to monday
$Date->modify('monday this week');


for($i=0;$i<10;++$i){
    echo $Date->format('l')."\n";
    $Date->modify('+1 days'); //go to next day
}

我想剩下的你可以解决,因为我真的不确定这是怎么回事

如果你想要一个当天的数字,比如这部分
$countMass[0];
你可以使用
w
格式。但是
0
是星期天,如果我没记错的话

for($i=0;$i<10;++$i){
   $Date->modify('+1 days');
   //dont assume your inputs will be correct
   if(isset($countMass[$Date->format('w')])){
      $massCountForExtraDays += $countMass[$Date->format('w')];
   }
}
for($i=0;$imodify(“+1天”);
//不要以为你的输入是正确的
if(设置($countMass[$Date->format('w')])){
$massCountForExtraDays+=$countMass[$Date->格式('w');
}
}

PS.而不是所有这些单独的if语句,这是糟糕的性能。我只会使用switch语句,但至少会将它们与
else
连接起来,这样它们就不会每次都进行不必要的计算。
$daysOfTheWeek[$I]
只能等于其中一个。如果您注意到上面的内容,我只是对它们进行了优化。

我不明白该函数应该做什么。请解释得更清楚一些。您是否试图计算,例如,给定天数内的周二数?Mass与此有什么关系?它似乎是什么一个数字数组,但这是什么?谢谢@jmarkmurphy。如表单所示,函数应该计算每天检查的质量数量并将它们相加。从开始日期到结束日期。谢谢@jmarkmurphy。如表单所示,函数应该计算每天检查的质量数量并将它们相加。Starting从startdate到enddate。一旦持续时间被分解为周和天,我需要函数从startdate开始,比如说--星期三并添加countMass(这是用户使用数据类型int检查的质量计数)从星期四、星期五开始的每一天。我希望它更清晰。更清晰的是,你现在应该将它编辑到你的问题中,因为评论可能会消失,这将使问题再次变得不清楚。感谢无数,你是最好的,你是救命恩人!
for($i=0;$i<10;++$i){
   $Date->modify('+1 days');
   //dont assume your inputs will be correct
   if(isset($countMass[$Date->format('w')])){
      $massCountForExtraDays += $countMass[$Date->format('w')];
   }
}