Diferença em meses

Delphi

29/03/2018

Pessoal, nao sou programador, mas gosto de inventar algumas coisas as vezes, e nessa eu estou tentando fazer um calculo de datas, estou usando o monthsgetwen:

edit2.Text := IntToStr(MonthsBetween(DateTimePicker1.Date, DateTimePicker2.Date));

legal, mas nao ta legal no calculo, as vezes ele mostra o periodo correto, as vezes mostra um mes a menos, por exemplo:

28/03/2018 e 28/03/2019 teria de mostrar 12 meses, ele mostra 11, mas em alguns momentos, sem fazer nada, apenas compilando ele mostra 12.

teria alguma coisa pra usar nesse caso, sem ser esse monthsbetwen?

eu preciso calcular meses, num contrato de 36 meses, quantos meses faltam pra terminar, e nesse calculo ele da meses a menos.
Deuzenildo Nascimento

Deuzenildo Nascimento

Curtidas 0

Melhor post

Natanael Ferreira

Natanael Ferreira

29/03/2018

Veja se esta função ajuda:

function MesEntreDatas(DataInicial, DataFinal: TDateTime): integer;
var
  DataIni, DataFim: TDateTime;
  Dias, Meses, Anos: integer;
begin
  if DataInicial > DataFinal then
  begin
    DataIni := Trunc(DataFinal);
    DataFim := Trunc(DataInicial);
  end
  else
  begin
    DataIni := Trunc(DataInicial);
    DataFim := Trunc(DataFinal);
  end;

  Dias := Trunc(DayOfTheMonth(DataFim) - DayOfTheMonth(DataIni));
  Meses := Trunc(MonthOf(DataFim) - MonthOf(DataIni));
  Anos := Trunc(YearOf(DataFim) - YearOf(DataIni));

  if Dias < 0 then
    Dec(Meses);

  Result := Meses + (Anos * 12);
end;


Exemplo de uso:

Edit2.Text := IntToStr(MesEntreDatas(DateTimePicker1.Date, DateTimePicker2.Date));


Veja este link:
https://www.devmedia.com.br/forum/tem-bug-na-funcao-monthsbetween/214328
GOSTEI 1

Mais Respostas

Deuzenildo Nascimento

Deuzenildo Nascimento

29/03/2018

Valeu, consegui fazer, foi um pouco diferente desse codigo ai, mas deu certo.
GOSTEI 0
POSTAR