Olá, boa noite!
Hoje é quarta-feira, 22 de November de 2017

Fórum - Tutoriais Informática


Categoria: PHP

Programação Web com PHP

PHPConstrução Calendário em PHP
Autor: Sérgio Moreira
Administrador
Criado em: 05-01-2017 13:50
65 visualizações

Abaixo está um simples exemplo de um calendário. Podemos navegar pelos meses, em que a detecção da data pretendida funciona pelo méodo $_GET. Basta clicar no dia pretendido e a data é automáticamente actualizada no endereço. O dia actual é representado a negrito.


<?php
$somar_dia = 1; // Contar Dias

// Buscar data no endereço
if(isset($_GET['data'])) {
    $explodeddate = explode("-", $_GET['data']);
    $mes = $explodeddate[1];
    $ano = $explodeddate[0];
    $dia = $explodeddate[2];
    $mes_extenso = $mes;
    // Detetar data corrente
    $dia_actual = date("d");
    $mes_actual = date("m");
    $ano_actual = date("Y");
} else {
    $mes = date("m", time());
    $dia = date("d", time());
    $ano = date("Y", time());
    $mes_extenso = $mes;
    // Detetar data corrente
    $dia_actual = date("d");
    $mes_actual = date("m");
    $ano_actual = date("Y");
}

$data_actual = date("Y-m-d", mktime(0, 0, 0, $mes, $dia, $ano));
$primeiro_dia_mes = mktime(0,0,0,$mes, 1, $ano);
$primeiro_dia_semana = date('D', $primeiro_dia_mes);
$total_dias_mes = cal_days_in_month(0, $mes, $ano);

// Mês anterior e Mês posterior
$mes_anterior = date('Y-m-d', strtotime("-1 month",strtotime($data_actual)));
$mes_seguinte = date('Y-m-d', strtotime("+1 month",strtotime($data_actual)));

switch($primeiro_dia_semana) {
    case "Sun": $celula = 0; break;
    case "Mon": $celula = 1; break;
    case "Tue": $celula = 2; break;
    case "Wed": $celula = 3; break;
    case "Thu": $celula = 4; break;
    case "Fri": $celula = 5; break;
    case "Sat": $celula = 6;
}

// muda nome dos meses para português
switch ($mes_extenso) {
    case "1":    $mes_extenso = 'Janeiro';    break;
    case "2":    $mes_extenso = 'Fevereiro';    break;
    case "3":    $mes_extenso = 'Março';        break;
    case "4":    $mes_extenso = 'Abril';        break;
    case "5":    $mes_extenso = 'Maio';        break;
    case "6":    $mes_extenso = 'Junho';        break;
    case "7":    $mes_extenso = 'Julho';        break;
    case "8":    $mes_extenso = 'Agosto';    break;
    case "9":    $mes_extenso = 'Setembro';    break;
    case "10":    $mes_extenso = 'Outubro';    break;
    case "11":    $mes_extenso = 'Novembro';    break;
    case "12":    $mes_extenso = 'Dezembro';
}

// Data por Extenso
$mes_ano_actual_extenso = $mes_extenso.' de '.$ano; // Data atual para identificar mês e ano do calendário

// ### Início Tabela ###
// criação da 1ª linha com nomes dos dias
echo "<table align='center' cellspacing=0 cellpadding=1 border=1 width='90%'>";
echo "<tr align='center'><th><a href='?data=" . $mes_anterior . "'><button>Mês Anterior</button></a></th>";
echo "<th colspan='5'>$mes_ano_actual_extenso</th>";
echo "<th><a href='?data=" . $mes_seguinte . "'><button>Mês Seguinte</button></a></th></tr>";

// Apresentar dias Semana
echo "<tr align='center'>";
echo "<th width='14.28%'>Dom</th>";
echo "<th width='14.28%'>Seg</th>";
echo "<th width='14.28%'>Ter</th>";
echo "<th width='14.28%'>Qua</th>";
echo "<th width='14.28%'>Qui</th>";
echo "<th width='14.28%'>Sex</th>";
echo "<th width='14.28%'>Sáb</th>";
echo "</tr>";
echo "<tr>";

// criação da tabela com os dias da semana, em função da data atual
$colunas_tabela = 7;

// Criar células brancas antes do dia 1
while($celula > 0) {
    echo "<td></td>";
    $celula = $celula-1;
    $somar_dia++;
}
$nr_dia_do_mes = 1; // Primeiro dia do mês

// Criar dias calendário
while($nr_dia_do_mes <= $total_dias_mes) {
    echo "<td>";

    // Condição para detetar data actual e mostrar a negrito
    if($nr_dia_do_mes == $dia_actual AND $mes == $mes_actual AND $ano == $ano_actual) {
        // Número do Dia
        echo "<b>$nr_dia_do_mes</b>";
    } else { // Se o dia não for o actual
        // Número do Dia
        echo $nr_dia_do_mes;
    }

    echo "</td>";
    $nr_dia_do_mes++;
    $somar_dia++;

    // Criar linha no calendário para 7 dias
    if($somar_dia > 7) {
        echo "</tr><tr>";
        $somar_dia = 1;
    }
}

// Criar células brancas depis do último dia do mês
while($somar_dia > 1 && $somar_dia <= 7) {
    echo "<td></td>";
    $somar_dia++;
}

echo "</tr></table>";
?>

Clique aqui para ver o calendário

Qualquer sugestão para melhoria do calendário, será sempre bem vinda :)



Você deve estar logado para poder comentar!
101 Utilizadores registados com acesso a este espaço.



Paypal
Ajude a melhorar este website. Obrigado!
Partilhar no Facebook Partilhar no Google + Partilhar no Twitter Partilhar no Linkedin Partilhar via email