Fórum Último dia do mês #259763

24/11/2004

0

Preciso saber qual último dia do mês de uma determinada data.

Se alguém puder me ajudar agradeço.

Obrigado, Ricardo


Ricardo_ascii

Ricardo_ascii

Responder

Posts

24/11/2004

Rodc

[color=darkred:d9ea850ec5]function UltimoDia(Mes, Ano: string): integer;
var dDia, dMes, dAno: Word;
data: TDateTime;
begin
dDia := 01;
dAno := StrToInt(Ano);
dMes := StrToInt(Mes);
Result := 0;
if (dMes = 0) or (dAno = 0) then exit;

dMes := dMes + 1;
if dMes = 13 then
begin
dMes := 12;
dAno := sAno - 1;
end;
data := EncodeDate(dAno, dMes, dDia) - 1;
DecodeDate(data, dAno, dMes, Result);
end;[/color:d9ea850ec5]


Responder

Gostei + 0

25/11/2004

Placido

Copiei esta função no meu projeto e está dando erro na linha abaixo, tem
que incluir alguma classe na clausula user para funcionar :?: :?: :?:

DecodeDate(data, dAno, dMes, Result);

Grato

Plácido


Responder

Gostei + 0

25/11/2004

Marco Salles

Copiei esta função no meu projeto e está dando erro na linha abaixo, tem que incluir alguma classe na clausula user para funcionar DecodeDate(data, dAno, dMes, Result); Grato


Se nao me a unit Da Procedure DecodeDate e [b:f7626f935d]Sysutils[/b:f7626f935d]


Responder

Gostei + 0

25/11/2004

Rodc

Não, eu que fiz errado a função.
DecodeDate retorna Word e o result da função é integer.
Copie novamente.
function UltimoDia(Mes, Ano: string): integer;
var dDia, dMes, dAno: Word;
    data: TDateTime;
begin
  dDia := 01;
  dAno := StrToInt(Ano);
  dMes := StrToInt(Mes);
  Result := 0;
  if (dMes = 0) or (dAno = 0) then
    exit;

  dMes := dMes + 1;
  if dMes = 13 then
  begin
    dMes := 12;
    dAno := dAno - 1;
  end;
  data := EncodeDate(dAno, dMes, dDia) - 1;
  DecodeDate(data, dAno, dMes, dDia);
  Result := dDia;
end;

Daí você pode implementar, caso queira, para que o parâmetro da função ao invés de string seja integer ou uma data mesmo.


Responder

Gostei + 0

25/11/2004

Moliva

Olá

Acredito que a menira mais fácil é usar a função [b:73edf167ef]DaysInMonth[/b:73edf167ef] - Sysutils.

Esta função retorna a quantidade de dias em um mês. Obviamente este valor equivale ao último dia.

Vejam exemplo:

ShowMessage(IntToStr(DaysInMonth(DateTimePicker1.Date)));


[]s
Moliva


Responder

Gostei + 0

25/11/2004

Marco Salles

Acredito que a menira mais fácil é usar a função DaysInMonth - Sysutils.


Sim, mas a partir de qual delphi esta funçaõ esta disponivel :?: :?: :?:


Responder

Gostei + 0

25/11/2004

Aroldo Zanela

Colegas,

A partir do Delphi 6, porém, pode ser adicionada em qualquer versão por meio da unit DateUtils da RxLib.
Fonte abaixo:

function IsLeapYear(AYear: Integer): Boolean;
begin
  Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or (AYear mod 400 = 0));
end;

function DaysPerMonth(AYear, AMonth: Integer): Integer;
const
  DaysInMonth: array[1..12] of Integer =
    (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
  Result := DaysInMonth[AMonth];
  if (AMonth = 2) and IsLeapYear(AYear) then Inc(Result); { leap-year Feb is special }
end;



Responder

Gostei + 0

26/11/2004

Placido

Aroldo esta função é 10, resolveu o meu problema, obrigado.
Plácido


Responder

Gostei + 0

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

Aceitar