PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Calc. delphi #442637

10/05/2013

0

tenho uma aplicação de contagem de datas com os seguintes codigos:

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
Ano, Mes, Dia, Ano1, Mes1, Dia1, Ano2, Mes2, Dia2 : Word;
Data1, Data2 :TdateTime;
Resultado : String;
begin
If StrToDate(MaskEdit1.Text) < StrToDate(MaskEdit2.Text) then
begin
Data1 := StrToDate(MaskEdit1.Text);
Data2 := StrToDate(MaskEdit2.Text);
end
else
begin
Data1 := StrToDate(MaskEdit2.Text);
Data2 := StrToDate(MaskEdit1.Text);
Resultado := 'Falta ';
end;
DecodeDate(Data1, Ano1, Mes1, Dia1);
DecodeDate(Data2, Ano2, Mes2, Dia2);
if Dia2 >= Dia1 Then
begin
Dia := Dia2 - Dia1;
end
else
begin
If Mes2 = 1 then
begin
Dia := Dia2 + 31 - Dia1;
Mes2 := Mes2 - 1;
Ano2 := Ano2 - 1;
end
else
begin
If Mes2 = 3 then
begin
Dia := Dia2 + 28 - Dia1;
Mes2 := Mes2 - 1;
end
else
begin
If (Mes2 = 5) or (Mes2 = 7) or (Mes2 = 10) or (Mes2 = 12) then
begin
Dia := Dia2 + 30 - Dia1;
Mes2 := Mes2 - 1;
end
else
begin
Dia := Dia2 + 31 - Dia1;
Mes2 := Mes2 - 1;
end;
end;
end;
end;
If Mes2 >= Mes1 then
begin
Mes := Mes2 - Mes1;
end
else
begin
Mes := Mes2 + 12 - Mes1;
Ano2 := Ano2 - 1;
end;
If Ano2 >= Ano1 then
begin
Ano := Ano2 - Ano1;
end
else
begin
Ano := 0;
end;
If Ano < 2 then
Resultado := Resultado + IntToStr(Ano) + ' Ano, '
else
Resultado := Resultado + IntToStr(Ano) + ' Anos, ';
If Mes < 2 then
Resultado := Resultado + IntToStr(Mes) + ' Mes, '
else
Resultado := Resultado + IntToStr(Mes) + ' Meses, ';
If Dia < 2 then
Resultado := Resultado + IntToStr(Dia) + ' Dia.'
else
Resultado := Resultado + IntToStr(Dia) + ' Dias.';
Label1.Caption :=(Resultado);
Label1.Visible :=true;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Label1.Visible :=false;
MaskEdit1.Clear;
MaskEdit2.Clear;
MaskEdit1.SetFocus;

end;

procedure TForm1.FormActivate(Sender: TObject);
begin
MaskEdit1.SetFocus;
end;


OBS: QUANDO EU FAÇO A SUBTRAÇÃO QUE NUMEROS DAS DATAS MAIS ATUAIS SÃO MAIORES, AÍ DA CERTINHO, EX; ANO 2000 MES 10 DIAS 09 MENOS 1999 09 08 O RESULTADO É 01 ANO 01 MES E 01 DIA, MAIS QUANDO ACONTECE O INVERSO AÍ DÁ UMA DIFERENÇA MAIS OU MENOS DE 20 DIAS OLHA SÓ O EXEMPLO. QUANDO EU DIMINUO 1989 03 03 DE 1988 05 08 O RESULTADO DEVERIA SER 00 ANO 10 MES E 06 DIAS MAIS ESTÁ SAINDO 00 ANO 09 MESES E 23 DIAS,

POR FAVOR ALGUEM ME DÊ UMA DICA?
Paulo

Paulo

Responder

Posts

10/05/2013

Paulo

tenho uma aplicação de contagem de datas com os seguintes codigos:

procedure tform1.bitbtn1click(sender: tobject);
var
ano, mes, dia, ano1, mes1, dia1, ano2, mes2, dia2 : word;
data1, data2 :tdatetime;
resultado : string;
begin
if strtodate(maskedit1.text) < strtodate(maskedit2.text) then
begin
data1 := strtodate(maskedit1.text);
data2 := strtodate(maskedit2.text);
end
else
begin
data1 := strtodate(maskedit2.text);
data2 := strtodate(maskedit1.text);
resultado := 'falta ';
end;
decodedate(data1, ano1, mes1, dia1);
decodedate(data2, ano2, mes2, dia2);
if dia2 >= dia1 then
begin
dia := dia2 - dia1;
end
else
begin
if mes2 = 1 then
begin
dia := dia2 + 31 - dia1;
mes2 := mes2 - 1;
ano2 := ano2 - 1;
end
else
begin
if mes2 = 3 then
begin
dia := dia2 + 28 - dia1;
mes2 := mes2 - 1;
end
else
begin
if (mes2 = 5) or (mes2 = 7) or (mes2 = 10) or (mes2 = 12) then
begin
dia := dia2 + 30 - dia1;
mes2 := mes2 - 1;
end
else
begin
dia := dia2 + 31 - dia1;
mes2 := mes2 - 1;
end;
end;
end;
end;
if mes2 >= mes1 then
begin
mes := mes2 - mes1;
end
else
begin
mes := mes2 + 12 - mes1;
ano2 := ano2 - 1;
end;
if ano2 >= ano1 then
begin
ano := ano2 - ano1;
end
else
begin
ano := 0;
end;
if ano < 2 then
resultado := resultado + inttostr(ano) + ' ano, '
else
resultado := resultado + inttostr(ano) + ' anos, ';
if mes < 2 then
resultado := resultado + inttostr(mes) + ' mes, '
else
resultado := resultado + inttostr(mes) + ' meses, ';
if dia < 2 then
resultado := resultado + inttostr(dia) + ' dia.'
else
resultado := resultado + inttostr(dia) + ' dias.';
label1.caption :=(resultado);
label1.visible :=true;
end;
procedure tform1.bitbtn2click(sender: tobject);
begin
label1.visible :=false;
maskedit1.clear;
maskedit2.clear;
maskedit1.setfocus;

end;

procedure tform1.formactivate(sender: tobject);
begin
maskedit1.setfocus;
end;


obs: quando eu faço a subtração que numeros das datas mais atuais são maiores, aí da certinho, ex; ano 2000 mes 10 dias 09 menos 1999 09 08 o resultado é 01 ano 01 mes e 01 dia, mais quando acontece o inverso aí dá uma diferença mais ou menos de 20 dias olha só o exemplo. quando eu diminuo 1989 03 03 de 1988 05 08 o resultado deveria ser 00 ano 10 mes e 06 dias mais está saindo 00 ano 09 meses e 23 dias,

por favor alguem me dê uma dica?







so uma correção, eu falei uma diferença de 20 dias mais na verdade é 1 ou 2 dias

Responder

Gostei + 0

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

Aceitar