Array
(
)

DateDiff retornando horas, muntos e segundos como?

Joao_arthur
   - 11 dez 2007

preciso retornar as horas, minutos e segundos em SQL através da função DateDiff tem como implementar? pois o detediff retorna a diferença entre horas a cada 60 minutos exemplo:
se o funcionário entrou para trabalhar as 06:00 e saiu as 14:10 então preciso que me retorne a diferença no caso seria 8:10 usando o datediff ele me retorna somente 8.

Djjunior
   - 11 jan 2008

faça somente a subtração das horas e formate (se for via sql veja o cast/convert) se for via Delphi por exemplo use um formatDateTime.

lembrando que campos dataHora são na realidade do tipo Float onde a parte inteira são os dias e a fração as horas.

Joao_arthur
   - 13 jan 2008

amigo subtrair as horas não é correto pois o pc pode ta configurado pra trabalhar como 24h ou 12h entendeu e tem mais se o funcionário entrar pra trabalhar em um dia e sair no outro vai calcular errado.

Djjunior
   - 13 jan 2008

Com relação a configuração de 12 ou 24 tanto faz.

Se você estiver guardando a data junto com a hora não dá erro não

O problema é só na hora de exibir formatar as horas, mas isso só se o resultado der mais de 24 que zera, não sei como fazer em sql, no Delphi eu fiz umas funções pra formatar a hora em dias/h:m:s ou [hh]:mm:ss, se quizer lhe passo depois.

Joao_arthur
   - 14 jan 2008

ok junior se der pra você passar pra mim eu agradeço cara

joao_moreira_97@hotmail.com

valew cara.

Djjunior
   - 15 jan 2008

Taí, nesse exemplo vc vai precisar de 4 Edits e um button no seu form

#Código

function FormatHoras(time: double; havDay: boolean): string;
var dias, horas: double;
 Pos1, horas24: integer;
 aux1: string;
begin
  dias  := trunc(time);
  horas := frac(time);

  if havDay then
 Result := FloatToStr(dias) + ´d ´ + TimeToStr(horas)
  else begin
 aux1 := TimeToStr(horas);
 pos1 := pos(´:´, aux1);
 horas24 := StrToInt(copy(aux1, 1, pos1 -1)) + (trunc(dias) * 24);
 Result  := IntToStr(horas24) + Copy(aux1, pos1, Length(aux1));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var dt1, dt2: tdatetime;

begin
  dt1        := StrToDateTime(Edit1.Text);
  dt2        := StrToDateTime(Edit2.Text);
  Edit3.Text := FormatHoras(dt2 - dt1, True);
  Edit4.Text := FormatHoras(dt2 - dt1, False);
end;


O que você tem que ter em mente é que
15/01/08 09:02 é igual a 39.462,376388888900 vc pode ver isso no excel por isso que funciona simplesmente fazer um menos o outro, e que tanto faz seu computador estar setado para 12 ou 24 horas.

Joao_arthur
   - 23 jan 2008

ok junior valeu cara...