Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tatiane.InterArt

Soma e Subtração de Datas, algumas modificações que resolveram mto

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 }

 

if strtoint(h1) > strtoint(h2) then {compara se hora 1 > q hora 2}

tthor := strtoint(h1) - strtoint(h2); { subtrai horas }

if strtoint(h1) < strtoint(h2) then {compara se hora 1 < q hora 2}

tthor := strtoint(h2) - strtoint(h1); { subtrai horas }

if strtoint(h1) = strtoint(h2) then {compara se hora 1 = hora 2}

tthor:=0;

if strtoint(m1) > strtoint(m2) then {compara se minuto 1 > q minuto 2}

ttmin := strtoint(m1) - strtoint(m2); { subtrai minutos }

if strtoint(m1) < strtoint(m2) then {compara se minuto 1 < q minuto 2}

ttmin := strtoint(m1) - strtoint(m2); { subtrai minutos }

if strtoint(m1) = strtoint(m2) then {compara se minuto 1 = minuto 2}

ttmin:=0;

 

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!

Desculpem a confusão, este é o exemplo correto! com as modificações, o de cima foram os exemplos pegos na NET que as vezes causavam horas com valor negativo tipo:

-01:30 ou 01:-30

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.