Hello! I will spend the way I build a calendar. I’m sorry I didn’t assemble based on your, but look at the comments specific to each part of the logic of the code that answers your question regarding the break of the table in 7 columns.
<?php
function my_calendar($month,$year) {
// Cria uma matriz contendo abreviações de dias da semana.
$daysOfWeek = array('Dom.','Seg.','Terç.','Qua.','Qui.','Sex.','Sáb.');
// Qual é o primeiro dia do mês em questão?
$firstDayOfMonth = mktime(0,0,0,$month,1,$year);
// Quantos dias este mês contém?
$numberDays = date('t',$firstDayOfMonth);
// Recupere algumas informações sobre o primeiro dia do mês em questão.
$dateComponents = getdate($firstDayOfMonth);
// Qual é o valor do índice (0-6) do primeiro dia do mês em questão.
$dayOfWeek = $dateComponents['wday'];
//cabeçalho
$calendar = "<table class='calendar'>";
$calendar .= "<caption>$year</caption>";
$calendar .= "<tr>";
// Cria os cabeçalhos do calendário
foreach($daysOfWeek as $day) {
$calendar .= "<th class='header'>$day</th>";
}
/* Cria o resto do calendário
Inicia o contador de dias, começando com o 1º. */
$currentDay = 1;
$calendar .= "</tr><tr>";
/* A variável $dayOfWeek é usada para
garantir que o calendário
display consiste em exatamente 7 colunas. */
if ($dayOfWeek > 0) {
$calendar .= "<td colspan='$dayOfWeek'> </td>";
}
$month = str_pad($month, 2, "0", STR_PAD_LEFT);
while ($currentDay <= $numberDays) {
//Sétima coluna (sábado) alcançada. Comece uma nova linha.
if ($dayOfWeek == 7) {
$dayOfWeek = 0;
$calendar .= "</tr><tr>";
}
$currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);
$date = "$year-$month-$currentDayRel";
$calendar .= "<td class='day' rel='$date'>$currentDay</td>";
//Incremento
$currentDay++;
$dayOfWeek++;
}
// Preencha a linha da última semana do mês, se necessário
if ($dayOfWeek != 7) {
$remainingDays = 7 - $dayOfWeek;
$calendar .= "<td colspan='$remainingDays'> </td>";
}
$calendar .= "</tr>";
$calendar .= "</table>";
return $calendar;
}
?>
<?php
$dateComponents = getdate();
$month = $dateComponents['mon'];
$year = $dateComponents['year'];
echo "Mês corrente ". PHP_EOL;
echo my_calendar($month,$year);
echo "<hr /> Seleção manual do mês de fevereiro do ano 2018 ". PHP_EOL;
echo my_calendar(2,2018);
?>
I’ll test the code, thank you very much!
– Caio Dicatti