Mostra a quantidade dos dias da semana em intervalo

Publicado por Edmar Wantuil (última atualização em 25/01/2012)

[ Hits: 7.435 ]

Homepage: wantuil.com

Download semana.php




Boa tarde acabei de escrever esse código, que irá me ajudar em um cálculo estatístico. Espero que possa ajuda a outras pessoas também.
Esse código exibi a quantidade de cada dia da semana em um intervalo. Por exemplo:
Se digitarmos 01/01/2012 a 31/12/2012 ele exibirá:

Dia    Quantidade
Domingo    53
Segunda-Feira    53
Terça-Feira    52
Quarta-Feira    52
Quinta-Feira    52
Sexta-Feira    52
Sábado    52

Sei que é bem simples mas pode ser útil de várias formas :-).
Estou totalmente aberto a críticas amigos, sei que com elas poderei evoluir.

  



Esconder código-fonte

<?
  //Retona a data em linux
  function data_unix($data)
  {
    $data= split("/", $data);
    return mktime(0,0,0,$data[1],$data[0],$data[2]);  
  }
  
  //Adiciona um dia a data
  function somadia($data)
  {  
    $data= split("/", $data);
    return date("d/m/Y",mktime(0,0,0,$data[1],$data[0] + 1,$data[2]));
  }
  
  //Retorna o numero do dia da semana
  function dia_semana($data)
  {
   $dia= date("w", data_unix($data));
   return $dia;
  }
?>
<html>
    <head>
        <title>Dias semana</title>
        <meta http-equiv="Content-Type"
          content   ="text/html; charset=UTF-8"
        />
        <script language="JavaScript">
          function valData(e,campo)
          {
            var tecla=(window.event)?event.keyCode:e.which;
            if(    (tecla > 47)
                && (tecla < 58)
              )
            {
              mascara(campo, '##/##/####');
              return true;
            }
            else
            {
              if (tecla != 8 )
                return false;
              else
              return true;
            }
          }
          
          function mascara(campo, mascara)
          {
            var i    = campo.value.length;
            var saida= mascara.substring(1,2);
            var texto= mascara.substring(i);
            if (texto.substring(0,1) != saida)
              campo.value += texto.substring(0,1);
          }
        </script>
    </head>
    <body>
      <form method="GET"
            action="index.php"
      >
        <b>Inicio:</b>
        <input type      = 'text'
               name      = 'inicio'
               size      = '10'
               maxlength = '10'
               onkeypress= 'return valData(event,this);return false;'
        >
        <b>Fim:</b>
        <input type      = 'text'
               name      = 'fim'
               size      = '10'
               maxlength = '10'
               onkeypress= 'return valData(event,this);return false;'
        >
        <input type ="submit"
               value="Calcular"
        >
      </form>
      <?
        //verifica se foi informado algo
        if($_GET['inicio'] || $_GET['fim'])
        {
          $inicio           = $_GET['inicio'];
          $fim              = $_GET['fim'];
          $semana[0]['nome']     = "Domingo";
          $semana[0]['quatidade']= 0;    
          $semana[1]['nome']     = "Segunda-Feira";
          $semana[1]['quatidade']= 0;
          $semana[2]['nome']     = "Terça-Feira";
          $semana[2]['quatidade']= 0;
          $semana[3]['nome']     = "Quarta-Feira";
          $semana[3]['quatidade']= 0;
          $semana[4]['nome']     = "Quinta-Feira";
          $semana[4]['quatidade']= 0;
          $semana[5]['nome']     = "Sexta-Feira";
          $semana[5]['quatidade']= 0;
          $semana[6]['nome']     = "Sábado";
          $semana[6]['quatidade']= 0;
      ?>
      
      <table border='1'>
        <tr>
          <td>Dia</td>
          <td>Quatidade</td>
        </tr>
        <?
        
          $data= $inicio;
          
          while(data_unix($fim) >= data_unix($data))
          {
            //busca o dia da semana
            $temp= dia_semana($data);
            
            //incrementa um dia ao dia da semana
            $semana[$temp]['quatidade']++;
            
            //incrementa um dia a data
            $data= somadia($data);
          }
          
          $cont= 0;
          
          //exibi resultado
          while(sizeof($semana) > $cont)
          {
            echo "
                  <tr>
                    <td>".$semana[$cont]['nome']."</td>
                    <td>".$semana[$cont]['quatidade']."</td>
                  </tr>
                 ";
            $cont++;
          }
        ?>
      </table>
      <?
        }
      ?>
  </body>
</html>

Scripts recomendados

Cria gráficos de consumo de CPU e Memória a partir de arquivos.

video aleatórias no seu site..youtube

Text4Shell

Sistema de comentarios em PHP

Gerador de Formulários com validações me PHP e JavaScript


  

Comentários
[1] Comentário enviado por renan.saddam em 25/01/2012 - 16:22h

Opa, eu acabei de fazer de uma forma diferente da sua. Veja só:

<?php

function dias($comeco, $fim) {
$segundos = strtotime($fim) - strtotime($comeco);
$dias = $segundos / (60 * 60 * 24) + 1;
$semanas = floor($dias / 7);

$primeiro = date('w', strtotime($comeco));
$ordem = array_keys(array_flip(array_slice(range(0, 6), $primeiro)) + array_flip(array_slice(range(0, 6), 0, $primeiro)));

$semana = array_fill(0, 7, $semanas);
$mais = array_slice($ordem, 0, $dias % 7);
foreach ($mais as $dia) {
$semana[$dia]++;
}

return $semana;
}
function bonito($dias) {
$bonito = array('Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado');
echo '<table>';
foreach (array_combine($bonito, $dias) as $dia => $quantidade) {
printf('<tr><td>%s</td><td>%d</td></tr>', $dia, $quantidade);
}
echo '</table>';
}

$dias = dias('2012-01-01', '2012-01-09');
bonito($dias);


Contribuir com comentário