Autor Tópico: calcular horas  (Lida 8182 vezes)

robertobru

  • Intermediário
  • ***
  • Mensagens: 223
    • Email
calcular horas
« Online: Janeiro 12, 2008, 11:48:32 pm »
Peço ajuda como devo solucionar o seguinte caso:  O código abaixo calcula as horas trabalhadas. Preciso colocar isso numa aplicação no SC que possui dois campos, hora início e hora término com mysql e mostre o resultado na própria aplicação.

<?php
   function SubtraiHorario($HoraInicial,$HoraFinal)
   {
   $MinutosIniciais = split(':',$HoraInicial);
         
   $TempoInicial = ($MinutosIniciais[0]*60) + $MinutosIniciai [1] ;
   $MinutosFinais = split(':',$HoraFinal);
      
   $TempoFinal = ($MinutosFinais[0]*60) + $MinutosFinais[1] ;
      
   $TotalMinutos =  ($TempoFinal - $TempoInicial);
      
   $NHoras = floor($TotalMinutos/60);
   $NMinutos = ($TotalMinutos%60);
         
   if(strlen($NMinutos) != 2 )
   $NMinutos = $NMinutos."0";   
      
   return $NHoras.':'.$NMinutos;
   
   }
   
   echo SubtraiHorario('09:00','10:00');
?>
resultado na tela = 1:00

Haroldo

  • Expert
  • *****
  • Mensagens: 6274
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re: calcular horas
« Responder #1 Online: Janeiro 13, 2008, 01:29:48 pm »
Utilize os metodos do Scriptcase.

robertobru

  • Intermediário
  • ***
  • Mensagens: 223
    • Email
Re: calcular horas
« Responder #2 Online: Janeiro 13, 2008, 10:33:07 pm »
Muito obrigado pela atenção.
Desculpem o abuso de pedir um exemplo de como fazer na prática a solução sugerida.

Victor Alcântara de Moraes

  • Novato
  • *
  • Mensagens: 34
  • CBTU - Metrorec
    • www.metrorec.com.br
    • Email
Re: calcular horas
« Responder #3 Online: Janeiro 16, 2008, 09:32:55 am »
estou com um problema parecido, também quero calcular horas trabalhadas, no mysql guardo hora inicial e hora final, mas no SC nao tem macro para calculo de horas só de datas, no meu caso estou tentando usar uma função do php mktime!
CBTU - Metrorec
GEIOM - DESENVOLVIMENTO

vambertosabino

  • Novato
  • *
  • Mensagens: 9
    • Email
Re: calcular horas
« Responder #4 Online: Janeiro 17, 2008, 10:39:55 am »
Não Sei se vai ajudar mas vou mandar esta função que vocês poderão colocar no comando afterupdate:

os campos datai e dataf são do tipo: "data e hora"


//{datai} = data inicial
//{dataf} = data final
//{resultado} = campo que receberá o resultado

function Difer_horas($hora1,$hora2){
 $entrada = {datai};
 $saida = {dataf};
 $hora1 = explode(":",$entrada);
 $hora2 = explode(":",$saida);
 $acumulador1 = ($hora1[0] * 3600) + ($hora1[1] * 60) + $hora1[2];
 $acumulador2 = ($hora2[0] * 3600) + ($hora2[1] * 60) + $hora2[2];
 $resultado = $acumulador2 - $acumulador1;
 $hora_ponto = floor($resultado / 3600);
 $resultado = $resultado - ($hora_ponto * 3600);
 $min_ponto = floor($resultado / 60);
 $resultado = $resultado - ($min_ponto * 60);
 $secs_ponto = $resultado;
 return $hora_ponto.":".$min_ponto.":".$secs_ponto;
 }

$final = Difer_horas();

{resultado} = $final;
« Última modificação: Janeiro 17, 2008, 10:45:21 am por vambertosabino »

vambertosabino

  • Novato
  • *
  • Mensagens: 9
    • Email
Re: calcular horas - outra alternativa
« Responder #5 Online: Janeiro 17, 2008, 10:44:34 am »
neste exemplo é para os que usam data e hora em campos diferentes... falta associar
***************************************************************
//$hota1 = {horai}
//$data1 = {datai}

***************************************************************
function tempo($data1,$hora1,$data2,$hora2){

   $i = split(":",$hora1);
   $j = split("-",$data1);
   $k = split(":",$hora2);
   $l = split("-",$data2);

   $tempo1 = mktime($i[0],$i[1],$i[2],$j[1],$j[2],$j[0]);
   $tempo2 = mktime($k[0],$k[1],$k[2],$l[1],$l[2],$l[0]);

   $calculo = ceil((($tempo2 - $tempo1)/60)/60);
   $tempo["hora_total"] = $calculo;
   $tempo["anos"] = ($calculo-($calculo%(365*24)))/(365*24);
   $calculo = ($calculo%(365*24));
   $tempo["meses"] = ($calculo-($calculo%(30*24)))/(30*24);
   $calculo = ($calculo%(30*24));
   $tempo["semanas"] = ($calculo-($calculo%(7*24)))/(7*24);
   $calculo = ($calculo%(7*24));
   $tempo["dias"] = ($calculo-($calculo%24))/24;
   $calculo = ($calculo%24);
   $tempo["horas"] = $calculo;

   return $tempo;
}

$final = tempo();

echo $final;

Victor Alcântara de Moraes

  • Novato
  • *
  • Mensagens: 34
  • CBTU - Metrorec
    • www.metrorec.com.br
    • Email
Re: calcular horas
« Responder #6 Online: Janeiro 24, 2008, 10:46:12 am »
Ainda não tinha visto esta resposta, fiz algo muito semelhante, mas ainda sim essa solução funciona, pois, a que eu fiz funcionou. 
CBTU - Metrorec
GEIOM - DESENVOLVIMENTO

Nelson-ABGTSISTEMAS

  • Novato
  • *
  • Mensagens: 1
    • Email
Re: calcular horas
« Responder #7 Online: Maio 23, 2011, 05:16:45 pm »
Boa tarde

algum poderia me ajudar

tenho o seguinte

08:00 12:00 13:00  18:00  = 08:00
preciso fazer esse calculo algume poderia me ajudar pois sou ainda iniciante na ferramenta;

leandroauler

  • Avançado
  • ****
  • Mensagens: 381
Re: calcular horas
« Responder #8 Online: Maio 24, 2011, 03:21:21 pm »
Essas horas são retornadas pelo MYSQL?

leandroauler

  • Avançado
  • ****
  • Mensagens: 381
Re: calcular horas - outra alternativa
« Responder #9 Online: Maio 24, 2011, 03:23:31 pm »
neste exemplo é para os que usam data e hora em campos diferentes... falta associar
***************************************************************
//$hota1 = {horai}
//$data1 = {datai}

***************************************************************
function tempo($data1,$hora1,$data2,$hora2){

   $i = split(":",$hora1);
   $j = split("-",$data1);
   $k = split(":",$hora2);
   $l = split("-",$data2);

   $tempo1 = mktime($i[0],$i[1],$i[2],$j[1],$j[2],$j[0]);
   $tempo2 = mktime($k[0],$k[1],$k[2],$l[1],$l[2],$l[0]);

   $calculo = ceil((($tempo2 - $tempo1)/60)/60);
   $tempo["hora_total"] = $calculo;
   $tempo["anos"] = ($calculo-($calculo%(365*24)))/(365*24);
   $calculo = ($calculo%(365*24));
   $tempo["meses"] = ($calculo-($calculo%(30*24)))/(30*24);
   $calculo = ($calculo%(30*24));
   $tempo["semanas"] = ($calculo-($calculo%(7*24)))/(7*24);
   $calculo = ($calculo%(7*24));
   $tempo["dias"] = ($calculo-($calculo%24))/24;
   $calculo = ($calculo%24);
   $tempo["horas"] = $calculo;

   return $tempo;
}

$final = tempo();

echo $final;

As horas são retornadas pelo MYSQL?

Se for é so executar no onRecord, o sc_lookup, fazendo query da data final menos a data inicial

Arquimedes

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 561
  • Ajudar para ser ajudado
Re: calcular horas
« Responder #10 Online: Maio 29, 2011, 01:34:21 pm »
nem tudo tem que ser resolvido pelo php, essa funcao de hora o banco mysql resolve


crie um metodo php com o nome diferenca_time com o script abaixo:

$hora_inicial={campo_hora_inicial};
$hora_final={campo_hora_final};


sc_lookup(dataset,"SELECT TIMEDIFF('$hora_inicial','$hora_final')");
if(!empty({dataset})){
   {diferenca_hora} = {dataset}[0][0];
}


fassa a chamada do metodo php no onRecord
diferenca_time();
« Última modificação: Junho 15, 2011, 07:31:59 pm por coema »

wnolau

  • Iniciante
  • **
  • Mensagens: 50
Re: calcular horas
« Responder #11 Online: Fevereiro 26, 2014, 12:36:02 pm »
nem tudo tem que ser resolvido pelo php, essa funcao de hora o banco mysql resolve


crie um metodo php com o nome diferenca_time com o script abaixo:

$hora_inicial={campo_hora_inicial};
$hora_final={campo_hora_final};


sc_lookup(dataset,"SELECT TIMEDIFF('$hora_inicial','$hora_final')");
if(!empty({dataset})){
   {diferenca_hora} = {dataset}[0][0];
}


fassa a chamada do metodo php no onRecord
diferenca_time();

Arquimedes, mas e se for em um form? Não tem OnRecord.

Luiz Baião

  • Novato
  • *
  • Mensagens: 31
    • Email
Re:calcular horas
« Responder #12 Online: Novembro 14, 2014, 02:56:15 pm »
Pessoal segue uma atualização pois para mim o que foi sugerido não funcionou então tive que refazer boa parte.
Inclui alguns comentários para calcular os SEGUNDOS pois para mim não era necessário.

Optei por não fazer via BANCO DE DADOS para ser menos um fator de carga de tráfego de rede.

function Difer_horas($hora1,$hora2) {
$inicio = $hora1; // {dta_hra_inicio};    // inicio
$fim    = $hora2;  // {dta_hra_fim};       // fim
   
$data_hora_ini = explode(" ",$inicio); // inicio
$data_hora_fim = explode(" ",$fim);   // fim

$data_ini = explode("-",$data_hora_ini[0]);
$data_fim = explode("-",$data_hora_fim[0]);

$hora_ini = explode(":",$data_hora_ini[1]);
$hora_fim = explode(":",$data_hora_fim[1]);

$acumulador_ini = ($hora_ini[0] * 3600) + ($hora_ini[1] * 60) + $hora_ini[2]; // inicio
$acumulador_fim = ($hora_fim[0] * 3600) + ($hora_fim[1] * 60) + $hora_fim[2]; // fim

$resultado = $acumulador_fim - $acumulador_ini;

 $hora_ponto = floor($resultado / 3600);
 $resultado = $resultado - ($hora_ponto * 3600);
 $min_ponto = floor($resultado / 60);
 //$resultado = $resultado - ($min_ponto * 60); // segundos
 $secs_ponto = $resultado;
 // return $hora_ponto.":".$min_ponto.":".$secs_ponto;
 //{duracao_atend} = $hora_ponto.":".$min_ponto.":".$secs_ponto;

$resultado = $hora_ponto.":".$min_ponto;

// echo $resultado;
return  $resultado;
// Adaptado de:
// http://www.scriptcase.com.br/forum/index.php?action=post;quote=1622;topic=564.0;last_msg=41188

}

Celso R.

  • Expert
  • *****
  • Mensagens: 941
Re:calcular horas
« Responder #13 Online: Novembro 15, 2014, 05:42:32 am »
Muito bom.
Obrigado por compartilhar.
Celso R.
________________________________
SC - V 8