Ver Mensaje Individual
  #6  
Antiguo 29-01-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

En la sección Trucos el compañero MaMu puso un codigo para Calcular EDAD en años, meses y dias de una Persona.

Creo que con unas pocas modificaciones te serviría para el caso:
Código Delphi [-]
...
type
  TAntiguedad = record
    year : Word;
    month: Word;
    day  : Word;
  end;

function Antiguedad(Desde, Hasta: TDate): TAntiguedad;
var
  a1,m1,d1: Word;
  a2,m2,d2: Word;
  Year, Month, Day: Word;
begin
  DecodeDate(Desde, a1, m1, d1);
  DecodeDate(Hasta, a2, m2, d2);

  Year := a2 - a1;

  if ( m1 <= m2 ) then
     Month := m2 - m1
  else
  begin
    Month := m2 + 12 - m1;
    Dec(Year);
  end;

  if ( d1 <= d2 ) then
    Day := d2 - d1
  else
  begin
    Day := d2 + MonthDays[IsLeapYear(a2), m2] - d1;
    Dec(Month);
  end;

  if Month < 0 then
  begin
    Year := Year - 1;
    Inc(Month, 12);
  end;

  Result.year  := Year;
  Result.month := Month;
  Result.day   := Day;
end;

// Ejemplo de uso:
procedure TForm1.Button1Click(Sender: TObject);
var
  d1, d2: TDate;
  a: TAntiguedad;
begin
  d1 := StrToDate('01/01/2017');  
  d2 := StrToDate('02/04/2018'); 
  a  := Antiguedad(d1, d2);
  ShowMessageFmt('años:%d, meses:%d, días:%d',[a.year, a.month, a.day]); // (*)

  d1 := StrToDate('29/12/2005');
  a  := Antiguedad(d1, Date());
  ShowMessageFmt('años:%d, meses:%d, días:%d',[a.year, a.month, a.day]);
end;
(*) Fechas tomadas de tu primer mensaje y da como resultado: años: 1, meses: 3, días: 1

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita