Página Inicial > Outros, PHP > Utilizando horas e minutos para fazer calculos

Utilizando horas e minutos para fazer calculos

Olá pessoal, vim escrever aqui hoje por que tive um problema enorme para fazer cálculos com horários. Um exemplo do que eu to falando é o seguinte: imaginem um colaborador, que recebe R$10,00 por hora. O mesmo colaborador faz 2 atividades, uma de 1h e 30m e outra de 45m. Assim ele tem ((2h e 15m) * R$10,00) para receber certo?

Uma formula que achei para resolver este problema, é converter os minutos em porcentagem, veja como é simples: 1,5 (1h 30m) + 0,75 (45m) = (2,25 * 10). Simples certo?

Bem, vou explicar mais ou menos como eu fiz para converter hora em percentagem. Primeiro, eu separei a parte inteira da parte decimal, fiz uma regra de 3 nas partes decimais, e somo com a parte inteira, simples! A transformação da porcentagem em horas eu fiz da seguinte forma: separei a parte inteira com a parte decimal, fiz uma regra de 3 com a parte decimal e JUNTEI com a parte inteira. Muito simples também ;)

Para ficar claro para quem gosta de ver código, fiz um código em PHP para vocês verem. Espero que ajude =)

   function hora2porc($hora)
   {
      $hora_aux = explode(',', str_replace('.', ',', $hora));
      return ($hora_aux[0] . '.' . ($hora_aux[1] * 100 / 60));
   }

   function porc2hora($hora)
   {
      $hora_aux = explode(',', number_format($hora, 2, ',', "));
      $minutos = round($hora_aux[1] * 60 / 100);
      $minutos = str_replace('.', ", $minutos);
      return ($hora_aux[0] . '.' . $minutos);
   }
 

Só para dar um gostinho, segue uma query que eu fiz em MySQL para fazer a conversão no proprio banco ;)

SELECT
   SUM(T004.quantidade_porcentagem)
FROM
   (SELECT
      CONCAT(T003.hora_inteira, '.', (T003.hora_inteira * 100 / 60)) AS 'quantidade_porcentagem',
      T003.*
   FROM
      (SELECT
         (REPLACE(T002.quantidade_horas, ',', '.') – T002.hora_inteira) AS 'hora_decimal',
         T002.*
      FROM
         (SELECT
            IF(LOCATE(',', T001.quantidade_horas_porc) > 0,
               SUBSTRING(T001.quantidade_horas_porc, 1, LOCATE(',', T001.quantidade_horas_porc)1),
               T001.quantidade_horas_porc
            ) AS "hora_inteira",
            T001.*
         FROM
            (SELECT
               REPLACE(CAST(T000.quantidade_horas AS CHAR), '.', ',') AS 'quantidade_horas_porc',
               T000.*
            FROM
               atividades T000
            ) AS T001
         ) AS T002
      ) T003
   ) T004,
   fases_projetos T005
WHERE
   T005.id_projeto = 43
      AND
   T004.id_fase_projeto = T005.id_fase_projeto
      AND
   T004.planejada = 'N'
      AND
   T005.contabilizar = 1
      AND
   T004.quantidade_porcentagem > 0
 
Categories: Outros, PHP Tags: , , ,
  1. Nenhum comentário ainda.
  1. Nenhum trackback ainda.