Como calcular a nº de meses entre um período de dadas.
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.
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
Curtidas 0
Respostas
Universodosoftware
02/04/2004
{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;
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
Rsballoussier
02/04/2004
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.
Até mais.
GOSTEI 0
Marco Salles
02/04/2004
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 ...
GOSTEI 0
Jdteichert
02/04/2004
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;
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