Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Cálculo de Horas sendo as horas strings]
Primeira soma Horas e segunda Subtrai Horas
function SomaHora(hora1, hora2: string): string;
var
h1, h2, m1, m2: string;
ttHor, ttMin: integer;
tthor_str, ttmin_str: string;
posi: integer;
begin
if (trim(hora1) = '') or (trim(hora2) = '') then
exit;
posi := Pos(':', hora1);
h1 := copy(hora1, 1, posi - 1); // recupera hora 1
m1 := copy(hora1, posi + 1, 2); // recupera minuto 1
posi := Pos(':', hora2);
h2 := copy(hora2, 1, posi - 1); // recupera hora 2
m2 := copy(hora2, posi + 1, 2); // recupera minuto 2
tthor := strtoint(h1) + strtoint(h2); // soma horas
ttmin := strtoint(m1) + strtoint(m2); // soma minutos
while (ttmin >= 60) do //se soma de minutos for > 60
begin // somamos +1 hora e subtraimos 60 do total de minutos
tthor := tthor + 1;
ttmin := ttmin - 60;
end;
ttmin_str := FormatFloat('00', ttmin); //formata com dois zeros
tthor_str := FormatFloat('00', tthor);
result := tthor_str + ':' + ttmin_str; //monta o resultado
end;
function SubtraiHora(hora1, hora2: string): string;
var
h1, h2, m1, m2: string;
ttHor, ttMin: integer;
tthor_str, ttmin_str, Menos: string;
posi: integer;
begin
if (trim(hora1) = '') or (trim(hora2) = '') then
exit;
posi := Pos(':', hora1);
h1 := copy(hora1, 1, posi - 1); { recupera hora 1 }
m1 := copy(hora1, posi + 1, 2); { recupera minuto 1 }
posi := Pos(':', hora2);
h2 := copy(hora2, 1, posi - 1); { recupera hora 2 }
m2 := copy(hora2, posi + 1, 2); { recupera minuto 2 }
tthor := strtoint(h1) - strtoint(h2); { soma horas }
ttmin := strtoint(m1) - strtoint(m2); { soma minutos }
while (ttmin >= 60) do { se soma de minutos for > 60 }
begin { somamos +1 hora e subtraimos 60 do total de minutos }
tthor := tthor + 1;
ttmin := ttmin - 60;
end;
if (ttmin >= -1) then { se minutos for > -1, retiramos o sinal de -, subtraímos -1 hora e subtraímos minutos de 60 para não ficar valor negativo }
Begin
Menos:=IntToStr(ttmin);
Delete(Menos,Pos('-',Menos),1);
ttmin:=StrToInt(Menos);
tthor:= tthor - 1;
ttmin:= 60 - ttmin;
end;
ttmin_str := FormatFloat('00', ttmin); { formata com dois zeros }
tthor_str := FormatFloat('00', tthor);
result := tthor_str + ':' + ttmin_str; { monta o resultado }
end;
Para testar, coloque em um form, 3 edits e um button. Faça no onclick do button:
Edit3.Text := SomaHora(Edit1.Text, Edit2.Text);
Agora é só adaptar ao que for de sua necessidade!
Carregando comentários...