Data Atual - Data Aniversário = Anos, Meses e dias
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
Curtidas 0
Respostas
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
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....
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
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....
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