PDA

Ver la Versión Completa : Calcular edad del niño en variables separadas


webmasterplc
08-11-2017, 17:48:40
Buenas estoy tratando de calcular la edad de una persona y tengo esta función que publico Mamu
function CalculaEdadCompleta(Fecha:TDateTime):String;
var A, AA, M, MM, D, DD: Word;
Anio, Mes, Dia: double;
begin
DecodeDate(Fecha, A, M, D);
DecodeDate(Date, AA, MM, DD);
Anio := Int(AA - A);
if( M <= MM ) then
Mes := MM - M
else
begin
Mes := MM+12-M;
Anio := Anio -1;
end;
if( D <= DD ) then
Dia := DD - D
else
begin
Dia:=DD+MonthDays[IsLeapYear(AA),MM]-D;
Mes := Mes -1;
end;
if Mes < 0 then
begin
Anio := Anio - 1;
Mes := 12 + Mes;
end;
Result := Format('Años: %.0f, Meses: %.0f, Dias: %.0f', [Anio, Mes, Dia]);

el llamado
etedad.Caption :=CalculaEdadCompleta(fnacimiento);

pero me coloca la edad con días meses y me gustaría en el caption capturarlo cada dato en una variable

etanios.caption:=CalculaEdadCompleta(fnacimiento)
etmeses.caption:=CalculaEdadCompleta(fnacimiento)
etdias.caption:=CalculaEdadCompleta(fnacimiento)

TOPX
08-11-2017, 19:01:39
Buenas.

Ahora trate de cambiar la definición de la función, por algo como
procedure CalculaEdadCompleta(Fecha: TDateTime;var Anio,Mes,Dia: Double);
var A, AA, M, MM, D, DD: Word;
begin
Y el llamado, por algo como:
CalculaEdadCompleta(fnacimiento,fanio,fmes,fdia);

etanios.caption:=FloatToStr(fanio);
etmeses.caption:=FloatToStr(fmes);
etdias.caption:=FloatToStr(fdia);
-

TOPX
08-11-2017, 20:47:46
Ah, y puede poner en comentario la siguiente línea
//Result := Format('Años: %.0f, Meses: %.0f, Dias: %.0f', [Anio, Mes, Dia]);
-

webmasterplc
08-11-2017, 22:55:08
Excelente Agradecido

wilcg
09-11-2017, 01:04:35
Hola webmasterplc, prueba con esta función.

function ObAAMMDD( tFInicio : TDate; tFFin : TDate ) : string;
var
anos, meses, dias, m : Integer;
begin
anos := YearOf (tFFin) - YearOf (tFInicio);
if MonthOf (tFInicio) > MonthOf (tFFin) then
anos := anos - 1;
if MonthOf (tFFin) < MonthOf (tFInicio) then
meses := 12 - MonthOf (tFInicio) + MonthOf (tFFin)
else
meses := MonthOf (tFFin) - MonthOf (tFInicio);
if DayOf (tFFin) < DayOf (tFInicio) then
begin
meses := meses - 1;
if MonthOf (tFFin) = MonthOf (tFInicio) then
begin
anos := anos - 1;
meses := 11;
end;
end;
dias := DayOf (tFFin) - DayOf (tFInicio);
if dias < 0 then
begin
m := MonthOf (tFFin) - 1;
if m = 0 then
m := 12;
case m of
1, 3, 5, 7, 8, 10, 12 : dias := 31 + dias;
4, 6, 9, 11 : dias := 30 + dias;
2 :
begin
if ((YearOf(tFFin) mod 4 = 0) and
(YearOf(tFFin) mod 100 <> 0))
or (YearOf(tFFin) mod 400 = 0) then
dias := 29 + dias
else
dias := 28 + dias;
end;
end;
end;
result := IntToStr (anos) + ' años, ' +
IntToStr (meses) + ' meses, ' +
IntToStr (dias) + ' días';

{
ObAAMMDD( tFInicio, tFFin );
}
end;

ObAAMMDD( FechaInicio, FechaFin );