Fórum Calcular tempo de fabricação entre duas datas/horas #297785
29/09/2005
0
Tenho no meu sistema uma tabela com a seguinte estrutura:
#CD_FAB (integer)
DT_INI (date)
HR_INI (time)
DT_FIM (date)
HR_FIM (time)
...
Preciso saber o tempo de fabricação que é a diferença de DT_INI/HR_INI e DT_FIM/HR_FIM, observando que eu posso iniciar a fabricação hj e terminar em mais de um dia, ou seja, pode levar um ou varios dias.
qual a meneira mais simples e que retorna um resultado rápido ?
obrigado
Diogo

Diogoalles
Curtir tópico
+ 0Posts
29/09/2005
Marco Salles
1 2 3 4 5 6 7 8 9 10 11 | function calcularDiferencaHoras(Dataf,datai:Tdate;HoraF,HoraI:ttime):TDateTime; var DataHoraF,DataHoraI:TDateTime; begin DataHoraF:=DataF+HoraF; DataHorai:=DataI+HoraI; if DataHoraI > DataHoraF result:=DataHoraI - DataHoraF else result:=DataHoraF - DataHoraI; end; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | procedure TForm1.Button1Click(Sender: TObject); var Dias:Integer; Total,Horas:Real; DT_INI :tdate; HR_INI :ttime; DT_FIM :tdate; HR_FIM :ttime; begin DT_FIM:=StrToDate(Edit1.text); HR_FIM:=StrToTime(Edit2.text); DT_INI:=StrToDate(Edit3.text); HR_INI:=StrToTime(Edit4.text); Total:=calcularDiferencaHoras(DT_FIM,DT_INI,HR_FIM,HR_INI); Dias:=Trunc(total); Horas:=total - Trunc(total); Showmessage(´Tem : ´+inttostr(dias)+´ Dias e Tem Horas : ´+timetostr(Horas)); end; |
Gostei + 0
30/09/2005
Diogoalles
Esqueci de dizer que o resultado tem q ser em horas, minutos, segundos -mesmo se for um ou mais dias. Poderei ter resultados 99h,30m,44s
valeu
Diogo
Gostei + 0
30/09/2005
Diogoalles
puderam perceber que tenho 2 campos tipo DATE e 2 campos tipo TIME.
seria mais interessante eu criar um tipo TIMESTAMP ? (nunca utilizei, mas li. Como usá-lo e fazer o calculo da diferença? e como faço para ´quebrá-lo´ para ter a data e/ou hora separados?
utilizo FB 1.5
obrigado
Diogo
Gostei + 0
30/09/2005
Marco Salles
Amigo , a resposta ja foi dada ... Pois dias tem 24 Horas e so somar e fazer um algebrismo
Daqui ha pouco eu posto
Gostei + 0
30/09/2005
Marco Salles
1 2 3 4 5 6 7 8 9 10 11 | function calcularDiferencaHoras(Dataf,datai:Tdate;HoraF,HoraI:ttime):TDateTime; var DataHoraF,DataHoraI:TDateTime; begin DataHoraF:=DataF+HoraF; DataHorai:=DataI+HoraI; if DataHoraI > DataHoraF then result:=DataHoraI - DataHoraF else result:=DataHoraF - DataHoraI; end; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | procedure TForm1.Button1Click(Sender: TObject); var Dias:Integer; Total,Horas:Real; QuerEmHorasMinutosSegundos:string; H,M,S,SS:Word; DT_INI :tdate; HR_INI :ttime; DT_FIM :tdate; HR_FIM :ttime; begin DT_FIM:=StrToDate(Edit1.text); HR_FIM:=StrToTime(Edit2.text); DT_INI:=StrToDate(Edit3.text); HR_INI:=StrToTime(Edit4.text); Total:=calcularDiferencaHoras(DT_FIM,DT_INI,HR_FIM,HR_INI); Dias:=Trunc(total); Horas:=total - Trunc(total); Decodetime(Horas,H,M,S,SS); H:=H+24*TRunc(dias); QuerEmHorasMinutosSegundos:=FormatFloat(´#00´,H)+´:´+FormatFloat(´00´,m) +´:´+FormatFloat(´00´,s); Showmessage(QuerEmHorasMinutosSegundos); end; |
Gostei + 0
16/10/2017
Júnior Brito
Gostaria de saber se tem alguma maneira de calcular somente dias úteis?
Desde já agradeço!
Gostei + 0
17/10/2017
Natanael Ferreira
https://www.devmedia.com.br/dicas-contando-dias-uteis-entre-periodos/2416
Gostei + 0
04/02/2022
Raphael Pacheco
var
DataHoraF,DataHoraI:TDateTime;
begin
DataHoraF:=DataF+HoraF;
DataHorai:=DataI+HoraI;
if DataHoraI > DataHoraF then
result:=DataHoraI - DataHoraF
else
result:=DataHoraF - DataHoraI;
end;[/code:1:ef8e648581]
[code:1:ef8e648581]procedure TForm1.Button1Click(Sender: TObject);
var
Dias:Integer;
Total,Horas:Real;
QuerEmHorasMinutosSegundos:string;
H,M,S,SS:Word;
DT_INI :tdate;
HR_INI :ttime;
DT_FIM :tdate;
HR_FIM :ttime;
begin
DT_FIM:=StrToDate(Edit1.text);
HR_FIM:=StrToTime(Edit2.text);
DT_INI:=StrToDate(Edit3.text);
HR_INI:=StrToTime(Edit4.text);
Total:=calcularDiferencaHoras(DT_FIM,DT_INI,HR_FIM,HR_INI);
Dias:=Trunc(total);
Horas:=total - Trunc(total);
Decodetime(Horas,H,M,S,SS);
H:=H+24*TRunc(dias);
QuerEmHorasMinutosSegundos:=FormatFloat(´#00´,H)+´:´+FormatFloat(´00´,m)
+´:´+FormatFloat(´00´,s);
Showmessage(QuerEmHorasMinutosSegundos);
end;[/code:1:ef8e648581]
E como faz para calcular em dinheiro o valor do resultado das horas decorridas?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)