Fórum Como calcular a nº de meses entre um período de dadas. #224003

02/04/2004

0

Olá para todos.
Pessoal alguem sabe como calcular a nº de meses entre um período de datas.
Ex: 01/01/2001 à 01/01/2006.
queria saber o nº de meses entre este periodo de data.
Desde já muito obrigado.


Debug

Debug

Responder

Posts

02/04/2004

Universodosoftware

{retorna a quantidade de meses entre duas datas}
function mesentredatas(datatotainicial, datatotafinal: string): integer;
var
mesini,mesfin,mes,anoini,anofin,ano,cont,cont1,I:integer;
begin
mesini:=strtoint(copy (datatotainicial,4,2));
mesfin:=strtoint(copy (datatotafinal,4,2));
anoini:=strtoint(copy (datatotainicial,7,4));
anofin:=strtoint(copy (datatotafinal,7,4));
mes:=0;
ano:=0;
// um if para saber se o funcionário ficou mais de um ano na empresa
if anoini<anofin then
begin
// este for é para contar(cont) quantos anos e adicionar 12(cont1)x quantidade(cont) em mêses
for I:=anoini to anofin do
begin
cont:=cont+1;
cont1:=cont1+12;
end;
mesini:=12-mesini;
mes:=((mesini+mesfin+cont1)-24);
end
// este eles é para saber se ele ficou até um ano
else
begin
mesini:=12-mesini;
mesfin:=12-mesfin;
mes:=(mesini-mesfin);
end;

If mes < 0 Then
mes := 0;

Result:=mes
end;


Responder

Gostei + 0

02/04/2004

Rsballoussier

A resposta dada é muito longa e feia, perdoe-me para aquele que respondeu a questão. Use a função MonthBetweens (é obrigatório colocar DATEUTILS na parte USES). Essa função simplifica.

Até mais.


Responder

Gostei + 0

02/04/2004

Marco Salles

A resposta dada é muito longa e feia,

Mas Foi Dada Com a Melhor Das Intenções, é Isto Que Conta

Use a função c (é obrigatório colocar DATEUTILS na parte USES)


Mas Cuidado, Esta Função Tem Um Comportamento Que As Vezes Pode Parecer Muito Suspeito e Atê Mesmo Indesejável..Por Exemplo:
ShowMessage(IntToStr(MonthBetweens(01/02/2003,01/03/2003));]
Retorna Zero, Quando se Espera Um Mes 

[b:142afbc95e]Pode Usar a Função Do Nosso Amigo Emerson, Passada Em Outro Tópico[/b:142afbc95e]
function MesesEntreDatas(dDataInicial, dDataFinal: TDate): integer; 
var AnoI, MesI, DiaI, AnoF, MesF, DiaF: word; 
    Anos, Meses, Dias: integer; 
    dDataAux: TDate; 
begin 
  if dDataInicial > dDataFinal then 
  begin 
    dDataAux := dDataFinal; 
    dDataFinal := dDataFinicial;
    dDataInicial:=dDataAux; 
  end; 
  DecodeDate(dDataInicial,AnoI,MesI,DiaI); 
  Decodedate(dDataFinal,AnoF,MesF,DiaF); 
  Anos := AnoF - AnoI; 
  Meses := MesF - MesI; 
  Dias := DiaF - DiaI; 
  if Meses < 0 then 
  begin 
     Inc(Meses,12); 
     Dec(Anos); 
  end; 
  if Dias < 0 then Dec(Meses); 
  Result := Meses + (Anos * 12); 
end;

Esta Não é Feia :P , Passada Com a Melhor Das Intençoes :P :P e Corrige o Problema Citado Anteriormente :P :P :P :P ...


Responder

Gostei + 0

02/04/2004

Jdteichert

function fMesesEntreDatas(cDataMaior, cDataMenor : TDate) : integer;
var AnoAtual, MesAtual, DiaAtual : Word;
var AnoComp, MesComp, DiaComp : Word;
var vAnos, vMeses, vDias : integer;
begin
Result := 0;
if cDataMenor > cDataMaior then Exit;
DecodeDate(cDataMaior,AnoAtual,MesAtual,DiaAtual);
DecodeDate(cDataMenor,AnoComp,MesComp,DiaComp);
vAnos := AnoAtual - AnoComp;
vMeses := MesAtual - MesComp;
vDias := DiaAtual - DiaComp;
if vDias < 0 then vMeses := vMeses - 1;
if vMeses < 0 then vAnos := vAnos - 1;
if vMeses < 0 then vMeses := 12 - (vMeses * -1);
Result := (vAnos * 12) + vMeses;
end;


Responder

Gostei + 0

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

Aceitar