Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Calcular edad del niño en variables separadas (https://www.clubdelphi.com/foros/showthread.php?t=92473)

webmasterplc 08-11-2017 18:48:40

Calcular edad del niño en variables separadas
 
Buenas estoy tratando de calcular la edad de una persona y tengo esta función que publico Mamu
Código Delphi [-]
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
Código Delphi [-]
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

Código Delphi [-]
etanios.caption:=CalculaEdadCompleta(fnacimiento)
etmeses.caption:=CalculaEdadCompleta(fnacimiento)
etdias.caption:=CalculaEdadCompleta(fnacimiento)

TOPX 08-11-2017 20:01:39

Buenas.

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

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

TOPX 08-11-2017 21:47:46

Ah, y puede poner en comentario la siguiente línea
Código Delphi [-]
//Result := Format('Años: %.0f, Meses: %.0f, Dias: %.0f', [Anio, Mes, Dia]);
-

webmasterplc 08-11-2017 23:55:08

Excelente Agradecido

wilcg 09-11-2017 02:04:35

Hola webmasterplc, prueba con esta función.

Código Delphi [-]
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;

Código Delphi [-]
ObAAMMDD( FechaInicio, FechaFin );


La franja horaria es GMT +2. Ahora son las 10:12:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi