Fórum Calcular intervalo de datas em dias e exibir num label. #192329
02/11/2003
0
Vou explicar direito, com detalhes, talvez alguma alma caridosa possa me ajudar...
É o seguinte:
Tenho um FORM onde eu tenho que capturar a DataNasc de um Edit (EdtDatanasc). Quando eu pressionar o botao, eu comparo a data recebida com a data que tenho armazenada numa tabela. Se a data recebida for igual a data da tabela, blz !, exibo os demais campos nos labels. Agora, se data recebida for maior q a data da tabela, preciso calcular o intervalo em dias entre uma data e outra e exibir num dos meus labels. O restante dos labels ficam com as informações da linha comparativa.
Acontece que está dando um erro ferrado quando tento fazer isso. Às vezes é erro de mismatch, invalid date e outros q não lembro.
Estou fazendo isso aqui:
declaro no inicio do form:
datamenor, datamaior : TDate;
dias: Double;
Depois no botao:
modulo.query.Close;
modulo.query.ParamByName(´data´).AsString:= EdtDataNasc.Text;
modulo.query.Open;
datamaior := strtodate(EdtDataNasc.Text);
datamenor := strtodate(modulo.query.Fields[0].AsString); //Este campo e a data da minha tabela, que esta definida como alpha
If (datamaior > datamenor) then begin
dias := trunc(datamaior - datamenor);
Label1.Caption := floattostr(dias); //está certa esta conversão ???
Label2.Caption := modulo.query.Fields[2].AsString;
Label3.Caption := modulo.query.Fields[3].AsString;
Label4.Caption := modulo.query.Fields[4].AsString + ´ / ´
+ modulo.query.Fields[5].AsString;
Label5.Caption := modulo.query.Fields[6].AsString;
end else begin
Label1.Caption := modulo.query.Fields[1].AsString;
Label2.Caption := modulo.query.Fields[2].AsString;
Label3.Caption := modulo.query.Fields[3].AsString;
Label4.Caption := modulo.query.Fields[4].AsString + ´ / ´
+ modulo.query.Fields[5].AsString;
Label5.Caption := modulo.query.Fields[6].AsString;
end;
Já tentei mudar a var dias para integer, não funcionou.
Não sei se a conversao de double para string está correta.
Quando tiro do if, deixo só a atribuição quando a data é igual, fica tudo certo. O problema está no trunc.
ALGUEM PODE ME AJUDAR ??? :cry: :cry: :cry:
Valeu !!!
Ana Davis
Ana Davis
Curtir tópico
+ 0Posts
02/11/2003
Edilcimar
hoje := date();
dias := hoje - datanascimento
label1.caption := inttostr(dias);
Gostei + 0
02/11/2003
Ana Davis
Mas nesse exemplo q vc fez está se considerando a data completa ? dd/mm/aaaa ?
Eu preciso só retornar o intervalo em dias.
P.ex.:
entrada: 04/06/1952
na tabela: 24/05/1952
valor a exibir: intervalo em dias entre 25/05/1952 e 04/06/1952 = 12 dias
Gostei + 0
02/11/2003
Edilcimar
Gostei + 0
02/11/2003
Ana Davis
Gostei + 0
02/11/2003
Ltres
Declare na Uses da unit :arrow: DateUtils
Depois coloque a função
Label1.Caption := IntToStr(DaysBetween(datamaior, datamenor));
Pronto.. Espero q seja isso :D
Gostei + 0
03/11/2003
Bacalhau
var i : integer;
posso fazer isto
i := strtodate(´03/11/2003´) - strtodate(´02/11/2003´);
que vai dar 1.
Parece-me que a solução é mudar o double para integer e retirar o trunc
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)