你好!有一个问题:你在某些日子去健身房,例如,星期二、星期四、星期六。知道今天的日期以及您想参加多少次锻炼后,您需要找出参加完这些锻炼后将经过多少个日历日。例如,今天是 2016 年 4 月 18 日星期一,你在星期二、星期四和星期六去健身房,我们想知道参加六次锻炼后还有多少天。结果应该是13天(4月19日、21日、23日、26日、28日和30日锻炼)。
您需要编写一个函数来执行此操作。函数签名应如下所示:
function($startDate, $trainingCount, $schedule)
其中
$startDate- 开始日期作为字符串,例如,'2016-04-18';
$trainingCount- 预定的锻炼次数为整数;
$schedule- 一个数组,其中包含从 1、Mon - 1、Tue - 2 等开始的星期几的序号。
以下是目前可用的内容:
function calculateDays($startDate, $trainingCount, array $schedule){
$start_date = date("d-m-y", $startDate);
$training_count = (int)$trainingCount;
foreach ($schedule as $day) {
switch ($day) {
case '1':
$arr[1] = "Mon";
break;
case '2':
$arr[2] = "Tue";
break;
case '3':
$arr[3] = "Wed";
break;
case '4':
$arr[4] = "Thu";
break;
case '5':
$arr[5] = "Fri";
break;
case '6':
$arr[6] = "Sat";
break;
case '7':
$arr[7] = "Sun";
break;
}
}
}
我不知道如何找到这些锻炼后将经过的天数。
最重要的是找出完成的周数和剩余一周的锻炼次数。一切。你有数据。
简单计算一下:
结果,我们得到一个分数,其中一个整数是将过去的整周数,余数是最后一周将进行多少次锻炼。例子:
但是,值得考虑的是,这只是在包括今天在内的本周没有培训的情况下。否则,公式为:
例子:
实际上,根据数据,会得到一个通用的公式:
让我解释得更清楚:
假设今天是星期天,周一、周三安排了 10 次锻炼。周五
本周将不再有培训,这意味着
10 / 3 = 3.1=> 3 周将过去,再进行 1 次培训(提前多少天,我们稍后会计算)。让我们输入变量:通用公式为:
就是这样......接下来,我们只需应用DateTime::add函数来处理日期并将结果天数添加到所需日期:
让我们考虑其他事情:
今天是星期三,周一、二、三、五安排了13堂课。
可选:您很可能需要再添加一天 - 例如包括最后一天在内。否则,它会证明它没有打开。
而且如果是短时间的锻炼(非常特殊的情况),比如一周只锻炼2次2次或者3/3,也就是余数会等于0,那么就需要计算a略有不同......更简单......但很难想象一个人指定自己进行2次锻炼))