Ir para conteúdo
Fórum Script Brasil
  • 0

Calendario php


Hejafe

Pergunta

Olá pessoal, estou com um problema que não sei como resolver.

Vamos ao problema:

Tenho 1 tabela no banco de dados que se chama "plano_manutencao aonde contem 5 campos ID,COMPUTADOR_ID, A,P,MANUTENCAO

nesta tabela tenho que multiplicar o A x P que dependendo do resulto será = "SEMESTRE"; "QUADRIMESTRAL" ou "ANUAL";

ate ai tudo sussi, Agora gostaria de saber como poderia colocar isto num calendario pois preciso saber os dia que poderia fazer esta manutencao de acordo com o resultado de A x P.

Ex: se o computador for anual ele me mostra no calendario 02/12/2011 e depois novamente 02/12/2012.

lembrando que SEMESTRAL = 2x no ano, QUADRIMESTRAL = 3x no ano e ANUAL = 1x

eu montei um calendario em php porem não sei como fazer para mostrar estas informações.

E também se é possivel fazer isto.

Lembrando que as manutenções não podem cair em feriados nem finais de semanas.

Segue meu codigo do calendario:

<HTML>
<HEAD>
</HEAD>
<BODY link=black vlink=black alink=black>
<?php
//gera calendario
echo calendario();

function dia_pascoa($a){
    //retorna a páscoa
    if ($a<1900){$a+=1900;}
    $c = floor($a/100);
    $n = $a - (19*floor($a/19));
    $k = floor(($c - 17)/25);
    $i = $c - $c/4 - floor(($c-$k)/3) +(19*$n) + 15;
    $i = $i - (30*floor($i/30));
    $i = $i - (floor($i/28)*(1-floor($i/28))*floor(29/($i+1))*floor((21-$n)/11));
    $j = $a + floor($a/4) + $i + 2 -c + floor($c/4);
    $j = $j - (7* floor($j/7));
    $l = $i - $j;
    $m = 3 + floor(($l+40)/44);
    $d = $l + 28 - (31*floor($m/4));
    $retorno=mktime(0, 0, 0, $m, $d-1, $a);
    return $retorno;
}

function calendario(){
    //Variável de retorno do código em HTML
    $retorno="";

    //Primeira linha do calendário
    $arr_dias=Array("Dom","Seg","Ter","Qua","Qui","Sex","Sáb");

    //Deseja iniciar pelo sábado?
    $ini_sabado=false;

    //Feriados comuns
    $feriados["1-1"]="Confraternização Universal";
    $feriados["21-4"]="Tiradentes";
    $feriados["15-11"]="Proclamação da República";
    $feriados["2-11"]="Finados";
    $feriados["1-5"]="Dia do Trabalho";
    $feriados["7-9"]="Dia da Independência";
    $feriados["12-10"]="N.S. Aparecida";
    //$feriados["15-10"]="Dia dos Professores";
    $feriados["25-12"]="Natal";

    //mes e ano do calendario a ser montado
    if($_GET['mes'] and $_GET['ano'])
    {
       $mes = $_GET['mes'];
      
       $ano = $_GET['ano'];
    }
    else
    {
       $mes = date("m");
       $ano = date("Y");
    }

       //Feriados com data mutante
    $pascoa=dia_pascoa($ano);
    $feriados[date("j-n", $pascoa)]="Páscoa";
    $feriados[date("j-n", $pascoa-86400*2)]="Paixão";
    $feriados[date("j-n", $pascoa-86400*46)]="Cinzas";
    $feriados[date("j-n", $pascoa-86400*47)]="Carnaval";
    $feriados[date("j-n", $pascoa+86400*60)]="Corpus Christi";

    $cont_mes = 1; 
    if ($ini_sabado){
        $dia_semana = converte_dia(date("w", mktime(0, 0, 0, $mes, 1, $ano))); //dia da semana do primeiro dia do mes
    }else{
        //Comum
        $dia_semana = date("w", mktime(0, 0, 0, $mes, 1, $ano)); 
    }
    $t_mes = date("t", mktime(0, 0, 0, $mes, 1, $ano)); //no. total de dias no mes

    //dados do mes passado
    $dia_semana_ant = ((date("d", mktime(0, 0, 0, $mes, 0, $ano))+1)-$dia_semana); 
    $mes_ant = date("m", mktime(0, 0, 0, $mes, 0, $ano));
    $ano_ant = date("Y", mktime(0, 0, 0, $mes, 0, $ano));

    //dados do mes seguinte
    $dia_semana_post = 1;
    $mes_post = date("m", mktime(0, 0, 0, $mes, $t_mes+1, $ano));  
    $ano_post = date("Y", mktime(0, 0, 0, $mes, $t_mes+1, $ano));  

    $retorno.="<center>";

    //titulo do calendario
    $retorno.= "<font style=\"font-family:verdana,arial,serif;font-size:16\"><b>Calendário: ".converte_mes($mes)."/".$ano."</b></font><br>";

    //montagem do calendario
    $retorno.= "<table><tr><td> </td><td>";

    $retorno.= "<table border=1 width=580 cellpadding=5 cellspacing=5 style='border-collapse: collapse' id=AutoNumber1 bordercolor=#333333>";
    //primeira linha do calendario
    $retorno.= "<tr bgcolor=#B5B5B5 face=verdana,arial,serif>";
    for($i=0;$i<7;$i++){
        if ($i==0 || $i==6){
            //é domingo ou sábado
            $retorno.= "<td bgcolor=#994444><font color=#EEEEEE face=verdana,arial,serif>$arr_dias[$i]</font></td>";
        }else{
            $retorno.= "<td><font color=#EEEEEE face=verdana,arial,serif>$arr_dias[$i]</font></td>";
        }
    }
    $cont_cor = 0;
    while ($t_mes >= $cont_mes)
    {
       $cont_semana = 0;
       $retorno.= "<tr>";
       if ($dia_semana == 7)
       {
          $dia_semana = 0;
       }
       if(($cont_cor%2)!=0) //alterna cor das linhas
       {
          $cor = "#F0F0F0";
       }
       else
       {
          $cor = "#F8F8F8";
       }
       
       while ($dia_semana < 7)
       {
          if ($cont_mes <= $t_mes)
          {
             if ($dia_semana == $cont_semana) //celulas de dias do mes
             {
                $retorno.= "<td valign=top bgcolor=".$cor." width=110 height=70>";
                $retorno.= "<font face=verdana,arial,serif size=2><b>".$cont_mes."</b>";

                /************************************************************/
                /******** Conteudo do calendario, se tiver, aqui!!!! ********/ 
                /************************************************************/
                $nome_feriado=$feriados[$cont_mes."-".((int)$mes)];
                if ($nome_feriado!=""){
                    $retorno.= "<br>" . $nome_feriado;
                }
                $retorno.= "</font></td>";
                $cont_mes++;
                $dia_semana++;
                $cont_semana++;
             }
             else //celulas vazias no inicio (mes anterior)
             {
                $retorno.= "<td valign=top bgcolor=".$cor.">";
                $retorno.= "<font color=#AAAAAA face=verdana,arial,serif size=2>".$dia_semana_ant."</font>";
                $retorno.= "</td>";
                $cont_semana++;    
                $dia_semana_ant++;
             }
          }
          else
          {
                while ($cont_semana < 7) //celulas vazias no fim (mes posterior)
                {
                    $retorno.= "<td valign=top bgcolor=".$cor.">";
                    $retorno.= "<font color=#AAAAAA face=verdana,arial,serif size=2>".$dia_semana_post."</font>";
                    $retorno.= "</td>";
                    $cont_semana++;    
                    $dia_semana_post++;
                }
         break 2;   
          }
       }
       $retorno.= "</tr>";
       $cont_cor++;
    }

    $retorno.= "</table>";
    $retorno.= "</td></tr></table>";
    $retorno.= "<br>";

    //links para mes anterior e mes posterior
    $retorno.= "<table width=100%><tr><td width=50% align=right>";
    $retorno.= "<font style=\"font-family:verdana,arial,serif;font-size:12\">Mês anterior: <a href=".$_SERVER['PHP_SELF']."?mes=".$mes_ant."&ano=".$ano_ant." class=estilo1>".converte_mes($mes_ant)."/".$ano_ant."</a></font></td>";
    $retorno.= "<td> | </td><td width=50%>";
    $retorno.= "<font style=\"font-family:verdana,arial,serif;font-size:12\">Mês posterior: <a href=".$_SERVER['PHP_SELF']."?mes=".$mes_post."&ano=".$ano_post." class=estilo1>".converte_mes($mes_post)."/".$ano_post."</a></font>";
    $retorno.= "</td></tr></table>";

    //formulario para escolha de uma data
    $retorno.= "<form method=get action=".$_SERVER['PHP_SELF'].">";
    $retorno.= "<font style=\"font-family:verdana,arial,serif;font-size:12\">Mês: </font><select name=mes>";
    $retorno.= "<option></option>";

    for($cont=1;$cont<=12;$cont++)
    {
       $retorno.= "<option value=".$cont.">".converte_mes($cont)."</option>";
    }
    $retorno.= "</select>";

    $retorno.= "<font style=\"font-family:verdana,arial,serif;font-size:12\">  Ano: </font><select name=ano>";
    $retorno.= "<option></option>";

    for($cont=date("Y")-5;$cont<=date("Y")+5;$cont++)
    {
       $retorno.= "<option value=".$cont.">".$cont."</option>";
    }
    $retorno.= "</select>";

    //Variaveis login na pagina apolo
    $retorno.= "<input type=hidden name=usuario value='".$_GET['usuario']."' />";
    $retorno.= "<input type=hidden name=senha value='".$_GET['senha']."' />";

    $retorno.= "  <input type=submit value=OK>";
    $retorno.= "</form>";

    $retorno.= "</center>";
    return $retorno;
}

function converte_dia($dia_semana) //funcao para comecar a montar o calendario pela quarta-feira
{
   if($dia_semana == 0)
   {
      $dia_semana = 1;
   }
   elseif ($dia_semana == 1)
   {
      $dia_semana = 2;
   }
   elseif ($dia_semana == 2)
   {
      $dia_semana = 3;
   }
   elseif ($dia_semana == 3)
   {
      $dia_semana = 4;
   }
   elseif ($dia_semana == 4)
   {
      $dia_semana = 5;
   }
   elseif ($dia_semana == 5)
   {
      $dia_semana = 6;
   }
   elseif ($dia_semana == 6)
   {
      $dia_semana = 0;
   }
   return $dia_semana; 
}

function converte_mes($mes)
{
         if($mes == 1)
         {
          $mes = "Janeiro";
         }
         elseif($mes == 2)
         {
          $mes = "Fevereiro";
         }
         elseif($mes == 3)
         {
          $mes = "Março";
         }
         elseif($mes == 4)
         {
          $mes = "Abril";
         }
         elseif($mes == 5)
         {
          $mes = "Maio";
         }
         elseif($mes == 6)
         {
          $mes = "Junho";
         }
         elseif($mes == 7)
         {
          $mes = "Julho";
         }
         elseif($mes == 8)
         {
          $mes = "Agosto";
         }
         elseif($mes == 9)
         {
          $mes = "Setembro";
         }
         elseif($mes == 10)
         {
          $mes = "Outubro";
         }
         elseif($mes == 11)
         {
          $mes = "Novembro";
         }
         elseif($mes == 12)
         {
          $mes = "Dezembro";
         }
         return $mes;
}
?>
</BODY>
</HTML>

Valeus pela ajuda pessoal

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Crie uma tabela no banco de dados com dias que são feriados;

Para colocar a manutenção a cada X meses, multiplique a quantidade de meses pelo número de dias de cada mes (o que lhe dará a quantidade de dias a cada manutenção) e ao exibir o calendário, coloque a manutenção a cada tantos dias. Se cair num feriado, some mais um dia. Se cair em outro, some mais um... vá fazendo isso até cair num dia útil.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...