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

(Resolvido) Calcular horas no formato 180:00:00


fxsoftware

Pergunta

Gostaria da ajuda de vocês aqui do forum, pois me deparei com um problema que achei que fosse facil de resolver, procurei muito no google, testei varios exemplos mas nenhum que resolve-se minha questão.

To fazendo um sistema basico de marcação de ponto para funcionarios. O funcionario tem uma carga horaria de 180hs mensal, pensei em pegar a quantidade de horas trabalhadas e subtrair por 180 o resultado iria colocar como hora extras, mas não estou conseguindo. Ex: funcionario trabalhou 193:49:00 pegava esse valor e subtraia por 180:00:00 o resultado: 13:49:00 qualquer coisa se não entenderam posso tentar explicar melhor desde já agradeço.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Converta horas em segundos e calcule a diferença

depois converta segundos em hora e mostre o resultado

exemplo

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// CONVETER HORAS EM SEGUNDOS
function Hora_Seg( Horas:string ):LongInt;
Var Hor,Min,Seg:LongInt;
begin
   Horas[Pos(':',Horas)]:= '['; Horas[Pos(':',Horas)]:= ']';
   Hor := StrToInt(Copy(Horas,1,Pos('[',Horas)-1));
   Min := StrToInt(Copy(Horas,Pos('[',Horas)+1,(Pos(']',Horas)-Pos('[',Horas)-1)));
   if Pos(':',Horas) > 0 then
      Seg := StrToInt(Copy(Horas,Pos(']',Horas)+1,(Pos(':',Horas)-Pos(']',Horas)-1)))
   else
      Seg := StrToInt(Copy(Horas,Pos(']',Horas)+1,2));
   Result := Seg + (Hor*3600) + (Min*60);
end;

// CONVERTER SEGUNDOS EM HORAS
function Seg_Hora( Seg:LongInt ):string;
Var Hora,Min:LongInt;  Tmp : Double;
begin
   Tmp := Seg / 3600;
   Hora := Round(Int(Tmp));
   Seg :=  Round(Seg - (Hora*3600));
   Tmp := Seg / 60;
   Min := Round(Int(Tmp));
   Seg :=  Round(Seg - (Min*60));
   Result := FormatFloat( '00', Hora )+ ':' + FormatFloat( '00', Min ) + ':' + FormatFloat( '00', Seg );
end;

procedure TForm1.Button1Click(Sender: TObject);
var horatrab, cargahora, horaextra : LongInt; tempo : string;
begin
   horatrab := Hora_Seg('193:49:00');
   cargahora := Hora_Seg('180:00:00');
   horaextra := horatrab - cargahora;
   tempo := Seg_Hora(horaextra);

   showmessage('Horas Extras : '+ tempo);
end;

end.

 

=================================================================

outro exemplo mais simples

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function DifHoras(HoraTrab, CargaHora :String):String;
var hh, mm :integer;
    vHora, vMinuto :integer;
begin
  hh:= StrToInt(Copy(HoraTrab, 1, 3)) - StrToInt(Copy(CargaHora, 1, 3));
  mm:= StrToInt(Copy(HoraTrab, 5, 2)) - StrToInt(Copy(CargaHora, 5, 2));

  vMinuto:= mm mod 60;
  vHora:=   hh + (mm div 60);

  Result:= FormatFloat('00:', vHora) + FormatFloat('00', vMinuto);
end;

 

procedure TForm1.Button1Click(Sender: TObject);
begin
   SHOWMESSAGE('Horas Extras : '+DifHoras('193:49','180:00'));
end;

end.

====================================================

abraço

 

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...