Fórum Como calcular a nº de meses entre um período de dadas. #224003
02/04/2004
0
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
Curtir tópico
+ 0Posts
02/04/2004
Universodosoftware
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;
Gostei + 0
02/04/2004
Rsballoussier
Até mais.
Gostei + 0
02/04/2004
Marco Salles
Mas Foi Dada Com a Melhor Das Intenções, é Isto Que Conta
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 ...
Gostei + 0
02/04/2004
Jdteichert
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;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)