Data Atual - Data Aniversário = Anos, Meses e dias

Delphi

13/06/2003

Preciso fazer essa conta. Data atual - data aniversário, resultado sendo quantos anos, quantos meses e quantos dias a pessoa tem. Uso o paradox. A idade consegui achar, mas os meses e os dias é minha dúvida? :oops:


Passos

Passos

Curtidas 0

Respostas

Sandra

Sandra

13/06/2003

Preciso fazer essa conta. Data atual - data aniversário, resultado sendo quantos anos, quantos meses e quantos dias a pessoa tem. Uso o paradox. A idade consegui achar, mas os meses e os dias é minha dúvida? :oops:



:D !!

Peguei esse código em uma apostila, não sei se ajuda. Teste-a...

unit Datas;

interface

type
  TData = Class(TObject)
  private
    Dia, Mes, Ano : Integer;
  public
    constructor Init (d,m,a : integer);
    procedure DefVal (d,m,a : integer);
    function AnoBis : boolean;
    procedure Incrementa;
    procedure Decrementa;
    procedure Adiciona (NumDeDias : integer);
    procedure Subtrai (NumDeDias : integer);
    function GetText : string;
  private
    function DiasNoMes : Integer;
end;

implementation

constructor TData.Init (d,m,a : integer);
begin
  dia := d;
  Mes := m;
  ano := a;
end;

procedure TData.DefVal (d,m,a : integer);
begin
  dia := d;
  Mes := m;
  ano := a;
end;

function TData.AnoBis : boolean;
begin
  if (ano mod 4 <> 0) then
    AnoBis := false
  else
    if (ano mod 100 <> 0) then
      AnoBis := true
    else
      if (ano mod 400 <> 0) then
        AnoBis := False
      else
        AnoBis := True;
end;

function TData.DiasNoMes : integer;
begin
  case Mes of
    1,3,5,7,8,10,12: DiasNoMes := 31;
    4,6,9,11: DiasNoMes := 30;
    2: if (AnoBis) then
           DiasNoMes := 29
         else DiasNoMes := 28;
  end;
end;
 
procedure TData.Incrementa;
begin
  if (dia < DiasNoMes) then {se não for o último dia do Mes}
    inc(dia)
  else
    if (Mes < 12) then {se não for dezembro}
      begin
        inc(Mes);
        dia := 1;
      end
    else {se for o dia de ano novo}
      begin
        inc(ano);
        Mes := 1;
        dia := 1;
      end;
end;

procedure TData.Decrementa;
begin
  if (dia > 1) then {se não for o primeiro dia do mês}
    Dec(dia) 
  else
    if (Mes > 1) then {se não for o primeiro dia do ano}
      begin
        Dec(Mes);
        dia := DiasNoMes;
      end
    else
      begin
        Dec(ano);
        Mes := 12;
        dia := DiasNoMes;
      end;
end;

function TData.GetText : string;
var
  d, m, a : string;
begin
  d := IntToStr(dia);
  case Mes of
     1: m := ´Janeiro´;
     2: m := ´Fevereiro´;
     3: m := ´Março´;
     4: m := ´Abril´;
     5: m := ´Maio´;
     6: m := ´Junho´;
     7: m := ´Julho´;
     8: m := ´Agosto´;
     9: m := ´Setembro´;
    10: m := ´Outubro´;
    11: m := ´Novembro´;
    12: m := ´Dezembro´;
  end;
  a := IntToStr(ano);
  GetText := d + ´, ´ + m + ´ de ´ + a;
end;
 
procedure TData.Adiciona (NumDeDias : integer);
var
  n : integer;
begin
  for n := 1 to NumDeDias do
    Incrementa;
end;

procedure TData.Subtrai (NumDeDias : integer);
var
  n : integer;
begin
  for n := 1 to NumDeDias do
    Decrementa;
end;

end.



Boa sorte!!

:lol:


GOSTEI 0
4_olho

4_olho

13/06/2003

É cara,

Primeiro é preciso saber o que se quer. Acho que você está confundindo data de NASCIMENTO com data de ANIVERSÁRIO. Como estamos em junho, se o cara nasceu de julho em diante, sua conta vai dar negativa, certo ? Então, não é isso que você quer.

Subtraia as duas datas (use a função DaysBetween) e o resultado será em dias. Divida o número de dias por 365,25 (lembre-se dos anos bissextos) e terá número de anos. Pegue o resto da divisão inteira e se for maior que 30, divida por 30 e terá número de meses. Novamente pegue o resto da última divisão inteira e terá os dias.

IMPORTANTE: se a gente não sabe fazer a conta no papel, dificilmente a fará no computador....


GOSTEI 0
4_olho

4_olho

13/06/2003

É cara,

Primeiro é preciso saber o que se quer. Acho que você está confundindo data de NASCIMENTO com data de ANIVERSÁRIO. Como estamos em junho, se o cara nasceu de julho em diante, sua conta vai dar negativa, certo ? Então, não é isso que você quer.

Subtraia as duas datas (use a função DaysBetween) e o resultado será em dias. Divida o número de dias por 365,25 (lembre-se dos anos bissextos) e terá número de anos. Pegue o resto da divisão inteira e se for maior que 30, divida por 30 e terá número de meses. Novamente pegue o resto da última divisão inteira e terá os dias.

IMPORTANTE: se a gente não sabe fazer a conta no papel, dificilmente a fará no computador....


GOSTEI 0
POSTAR