Calcular mês determinado entre datas
Olá pessoal. Estou precisando de uma ajuda aqui no meu trabalho. O problema é o seguinte tenho duas datas (exemplo: inicio 01/07/2016 e fim 30/09/2018) tenho que saber quantos meses de JULHO existe entre essas datas.
Ivan Avelar
Curtidas 0
Respostas
Raimundo Pereira
13/11/2018
uses
Dateutils,
private
{ Private declarations }
Function RQ(Data_Inicial, Data_Final:TDate; Retorno:integer):String;
Function TForm1.RQ(Data_Inicial, Data_Final:TDate; Retorno:integer):String;
Var Tipo:string;
begin
case Retorno of
0: Result := IntToStr(DaysBetween(Data_Inicial,Data_Final));
1: Result := IntToStr(MonthsBetween(Data_Inicial,Data_Final));
2: Result := IntToStr(YearsBetween(Data_Inicial,Data_Final));
end;
case Retorno of
0: Tipo := 'Dias';
1: Tipo := 'Meses';
2: Tipo := 'Anos';
end;
ShowMessage('A diferença entre '+Tipo+
' entre '+DateToStr(Data_Inicial)+' Até '+DateToStr(Data_Final)
+' é de '+Result+' , '+ tipo);
end;
end.
//Chamando a Function
procedure TForm1.Button1Click(Sender: TObject);
begin
//Chama a função e retorna a quantidade de dias
RQ(DateTimePicker1.Date,DateTimePicker2.Date,0);
//Chama a função e retorna a quantidade de meses
RQ(DateTimePicker1.Date,DateTimePicker2.Date,1);
//Chama a função e retorna a quantidade de anos
RQ(DateTimePicker1.Date,DateTimePicker2.Date,2);
end;
GOSTEI 0
Emerson Nascimento
13/11/2018
uma forma tosca:
const
MesSingularPlural: array[boolean] of string = ('mês', 'meses');
var
DataAtual: TDateTime;
aDatas: array of TDateTime;
Mensagem: TString;
begin
// aqui suponho que DataInicial e DataFinal já estão preenchidas com os valores desejados
Mensagem := 'No período entre ' + DateToStr( DataInicial ) + ' e ' + DateToStr( DataFinal );
DataAtual := DataInicial;
while DataAtual <= DataFinal
begin
if MonthOf( DataAtual ) = 7 then
begin
SetLength( aDatas, Length(aDatas)+1 );
aDatas[High(aDatas)] := DataAtual
end;
if DataAtual = DataFinal then exit;
DataAtual := StartOfTheMonth( EndOfTheMonth( DataAtual ) + 1 );
if DataAtual > DataFinal then
DataAtual := DataFinal;
end;
if Length(aDatas) = 0 then
// monta a mensagem pertinente
Mensagem := Mensagem + ' não há mês de JULHO'
else
// monta a mensagem informando quantos meses de JULHO foram encontrados
Mensagem := Mensagem + ' há ' + Trim( IntToStr( Length(aDatas) ) ) + ' ' + MesSingularPlural[Length(aDatas)>1] + ' de JULHO';
MessageBox('Resultado', PChar(Mensagem));
end;
GOSTEI 0
Emerson Nascimento
13/11/2018
uma forma tosca:
const
MesSingularPlural: array[boolean] of string = ('mês', 'meses');
var
DataAtual: TDateTime;
aDatas: array of TDateTime;
Mensagem: TString;
begin
// aqui suponho que DataInicial e DataFinal já estão preenchidas com os valores desejados
Mensagem := 'No período entre ' + DateToStr( DataInicial ) + ' e ' + DateToStr( DataFinal );
DataAtual := DataInicial;
while DataAtual <= DataFinal
begin
if MonthOf( DataAtual ) = 7 then
begin
SetLength( aDatas, Length(aDatas)+1 );
aDatas[High(aDatas)] := DataAtual
end;
if DataAtual = DataFinal then exit;
DataAtual := StartOfTheMonth( EndOfTheMonth( DataAtual ) + 1 );
if DataAtual > DataFinal then
DataAtual := DataFinal;
end;
if Length(aDatas) = 0 then
// monta a mensagem pertinente
Mensagem := Mensagem + ' não há mês de JULHO'
else
// monta a mensagem informando quantos meses de JULHO foram encontrados
Mensagem := Mensagem + ' há ' + Trim( IntToStr( Length(aDatas) ) ) + ' ' + MesSingularPlural[Length(aDatas)>1] + ' de JULHO';
MessageBox('Resultado', PChar(Mensagem));
end;GOSTEI 0
Natanael Ferreira
13/11/2018
Mais uma opção rsrs:
Função:
Exemplo de uso, com DateTimePicker para informar as datas do intervalo:
Função:
function ContaMesEspecifico(Inicio, Fim: TDate; Mes: Integer): Integer;
var
count: Integer;
begin
count := 0;
Inicio := StrToDate('01/' + IntToStr(MonthOf(Inicio)) + '/' + IntToStr(YearOf(Inicio)));
Fim := StrToDate('02/' + IntToStr(MonthOf(Fim)) + '/' + IntToStr(YearOf(Fim)));
while (Inicio < Fim) do
begin
if MonthOf(Inicio) = Mes then
Inc(count);
Inicio := IncMonth(Inicio);
end;
Result := count;
end;Exemplo de uso, com DateTimePicker para informar as datas do intervalo:
ShowMessage(IntToStr(ContaMesEspecifico(DateTimePicker1.Date, DateTimePicker2.Date, 7)) + ' meses de Julho');
GOSTEI 0