Я хочу сохранить количество месяцев, происходящих в датах, считанных из CSV, где даты вводятся в формате dd/mm/yyyy. $all
- это массив этих дат. Я рисую прогресс студентов в учебном году, который начинается в сентябре и заканчивается в июле. Дата представляет собой достижение ученика. Мне нужен счетчик, чтобы быть кумулятивными - дата в сентябре также должны учитываться во всех последующих месяцев и т.д., то я использую это, чтобы создать график Google, такие как это:Сохранение совокупного количества месяцев
Я следующий рабочий код который чувствует себя очень громоздким. Я чувствую, что мне не хватает чего-то, что позволило бы гораздо более сжатым способом решить мою проблему.
Существуют ли общие решения для работы с датами таким образом? Можете ли вы предложить более широкое чтение?
foreach ($all as $y) {
$month = substr($y,3, 2);
switch ($month) {
case '09':
$sep++;$oct++;$nov++;$dec++;$jan++;$feb++;$mar++;$apr++;$may++;$jun++;$jul++;
break;
case '10':
$oct++;$nov++;$dec++;$jan++;$feb++;$mar++;$apr++;$may++;$jun++;$jul++;
break;
case '11':
$nov++;$dec++;$jan++;$feb++;$mar++;$apr++;$may++;$jun++;$jul++;
break;
case '12':
$dec++;$jan++;$feb++;$mar++;$apr++;$may++;$jun++;$jul++;
break;
case '01':
$jan++;$feb++;$mar++;$apr++;$may++;$jun++;$jul++;
break;
case '02':
$feb++;$mar++;$apr++;$may++;$jun++;$jul++;
break;
case '03':
$mar++;$apr++;$may++;$jun++;$jul++;
break;
case '04':
$apr++;$may++;$jun++;$jul++;
break;
case '05':
$may++;$jun++;$jul++;
break;
case '06':
$jun++;$jul++;
break;
case '07':
$jul++;
break;
default:
$jul++;
}
}
//All months initially set to 1 to help with scaling issues.
//Work out percentage of all achievements completed
$NOW = date("n");
switch($NOW) {
case '9':
if ($sep != 1) {
$sep = round(($sep-1)/$total*100);
}
$oct="null";$nov="null";$dec="null";$jan="null";$feb="null";$mar="null";$apr="null";$may="null";$jun="null";$jul="null";
break;
case '10':
if ($oct != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
}
$nov="null";$dec="null";$jan="null";$feb="null";$mar="null";$apr="null";$may="null";$jun="null";$jul="null";
break;
case '11':
if ($nov != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
}
$dec="null";$jan="null";$feb="null";$mar="null";$apr="null";$may="null";$jun="null";$jul="null";
break;
case '12':
if ($dec != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
}
$jan="null";$feb="null";$mar="null";$apr="null";$may="null";$jun="null";$jul="null";
break;
case '1':
if ($jan != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
$jan = round(($jan-1)/$total*100);
}
$feb="null";$mar="null";$apr="null";$may="null";$jun="null";$jul="null";
break;
case '2':
if ($feb != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
$jan = round(($jan-1)/$total*100);
$feb = round(($feb-1)/$total*100);
}
$mar="null";$apr="null";$may="null";$jun="null";$jul="null";
break;
case '3':
if ($mar != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
$jan = round(($jan-1)/$total*100);
$feb = round(($feb-1)/$total*100);
$mar = round(($mar-1)/$total*100);
}
$apr="null";$may="null";$jun="null";$jul="null";
break;
case '4':
if ($apr != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
$jan = round(($jan-1)/$total*100);
$feb = round(($feb-1)/$total*100);
$mar = round(($mar-1)/$total*100);
$apr = round(($apr-1)/$total*100);
}
$may="null";$jun="null";$jul="null";
break;
case '5':
if ($may != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
$jan = round(($jan-1)/$total*100);
$feb = round(($feb-1)/$total*100);
$mar = round(($mar-1)/$total*100);
$apr = round(($apr-1)/$total*100);
$may = round(($may-1)/$total*100);
}
$jun="null";$jul="null";
break;
case '6':
if ($jun != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
$jan = round(($jan-1)/$total*100);
$feb = round(($feb-1)/$total*100);
$mar = round(($mar-1)/$total*100);
$apr = round(($apr-1)/$total*100);
$may = round(($may-1)/$total*100);
$jun = round(($jun-1)/$total*100);
}
$jul="null";
break;
case '7':
if ($jul != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
$jan = round(($jan-1)/$total*100);
$feb = round(($feb-1)/$total*100);
$mar = round(($mar-1)/$total*100);
$apr = round(($apr-1)/$total*100);
$may = round(($may-1)/$total*100);
$jun = round(($jun-1)/$total*100);
$jul = round(($jul-1)/$total*100);
}
break;
case '8':
if ($jul != 1) {
$sep = round(($sep-1)/$total*100);
$oct = round(($oct-1)/$total*100);
$nov = round(($nov-1)/$total*100);
$dec = round(($dec-1)/$total*100);
$jan = round(($jan-1)/$total*100);
$feb = round(($feb-1)/$total*100);
$mar = round(($mar-1)/$total*100);
$apr = round(($apr-1)/$total*100);
$may = round(($may-1)/$total*100);
$jun = round(($jun-1)/$total*100);
$jul = round(($jul-1)/$total*100);
}
break;
default:
echo " ";
}