Mostra a quantidade dos dias da semana em intervalo

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

[ Hits: 8.506 ]

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

Transferir dados do Excel ou TXT para BD utilizando PHP

Redimensionador de fotos em PHP

Install PHP8, 8.2, 8.3 no Deepin 23

Backup de arquivos na Cloud com AWS Amazon S3 e PHP

phpAutoConf :: gerencie configurações de modo fácil e automático


  

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