Fórum Calcular tempo de fabricação entre duas datas/horas #297785

29/09/2005

0

olá pessoal

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

Diogoalles

Responder

Posts

29/09/2005

Marco Salles

Da para brincar de muitas formas diferentes :

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;



Responder

Gostei + 0

30/09/2005

Diogoalles

olá pessoal

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


Responder

Gostei + 0

30/09/2005

Diogoalles

Outra questão que gostaria de levantar,

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


Responder

Gostei + 0

30/09/2005

Marco Salles

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


Amigo , a resposta ja foi dada ... Pois dias tem 24 Horas e so somar e fazer um algebrismo

Daqui ha pouco eu posto


Responder

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;



Responder

Gostei + 0

16/10/2017

Júnior Brito

Boa Noite,

Gostaria de saber se tem alguma maneira de calcular somente dias úteis?

Desde já agradeço!
Responder

Gostei + 0

17/10/2017

Natanael Ferreira

Responder

Gostei + 0

04/02/2022

Raphael Pacheco

[code:1:ef8e648581]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;[/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]


Ler Mais...


E como faz para calcular em dinheiro o valor do resultado das horas decorridas?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar