PHP / HTML Calendar - How to break table in 7 columns

1

I'm trying to build a calendar in HTML and PHP, but I'm having some difficulties, one of them is, how do I break the table into seven columns in one instead of putting every day of the week straight?

Follow my code so far.

<?php

function diasMeses(){
$retorno = array();

for ($i=1; $i <= 12 ; $i++) { 
    $retorno[$i] = cal_days_in_month(CAL_GREGORIAN, $i, date('Y'));

}

return $retorno;
}

function quebraMesEmDias($array, $mes)
{
$qtdDias = $array[$mes];
$retorno = array();
for ($i=1; $i <=$qtdDias ; $i++) { 
    array_push($retorno, $i);
}

return $retorno;
}


?>



<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
<script src="main.js"></script>
</head>
<body>

<table border="2">

<?php 
$qtd_dias_mes = diasMeses();
// Inserindo manualmente o mês a ser mostrado
$numMes = 2;
$array_mes_desejado = quebraMesEmDias($qtd_dias_mes, $numMes);

foreach ($array_mes_desejado as $indice => $mes) {

?>
    <td>
          <?php 

             echo $mes;

            ?>
    </td>
<?php } ?>


</table>

   

Thank you in advance.

    
asked by anonymous 12.12.2018 / 03:37

1 answer

1

Hello! I will go through the way I build a calendar. I apologize for not mounting based on your own, but see the comments specific to each part of the code logic that answers your question regarding the 7-column table break.

<?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'>&nbsp;</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'>&nbsp;</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);

?>
    
12.12.2018 / 14:56