Bueno, me han herido la moral
, y por eso hice esta comprobación:
Código:
function DelphiComAr(AFechaNacimiento: TDateTime) : Integer;
begin
Result := Trunc((Date - AFechaNacimiento) / 365.25);
end;
function JachGuate(FechaNacimiento : TDateTime) : Integer;
var
an, mn, dn : Word;
ahoy, mhoy, dhoy : Word;
begin
DecodeDate(FechaNacimiento, an, mn, dn);
DecodeDate(Now, ahoy, mhoy, dhoy);
if (mhoy * 100 + dhoy) > (mn * 100 + dn) Then
Result := an - dn
else
Result := an - dn + 1;
end;
function MarcosZorrilla(FechaNacimiento : TDate) : Integer;
Var
an, mn, dn : Word;
ahoy, mhoy, dhoy : Word;
Begin
DecodeDate(FechaNacimiento, an, mn, dn);
DecodeDate(Now, ahoy, mhoy, dhoy);
If (mn > mhoy) or((mn = mhoy) and (dn > dhoy)) then
Result:=ahoy - an - 1
else
Result:=ahoy - an;
End;
procedure TForm1.Button1Click(Sender: TObject);
var
ADate : TDateTime;
i,
ADelphi,
AJach,
AMarcos: Integer;
begin
ADate := StrToDate('01/01/1900');
repeat
ADelphi := DelphiComAr(ADate);
AJach := JachGuate(ADate);
AMarcos := MarcosZorrilla(ADate);
{He comentado la comprobación de la funcion JachGuate}
if {(ADelphi <> AJach) or} (ADelphi <> AMarcos) {or (AJach <> AMarcos) }Then
Memo1.Lines.Add(Format('%s - Delphi.com.ar: %4d JachGuate: %4d MarcosZorrilla: %4d', [DateToStr(ADate), ADelphi, AJach, AMarcos]));
ADate := ADate + 1;
until ADate > Date;
end;
Conclusión: La función de JachGuate evidentemente esta mal, o yo tengo 1996 años
, y la de Marcos difiere de la mía en un pequeño detalle, en mi función que es mucho mas sencilla, el día del cumpleaños aún no a sumado un año, en la de marcos el día del cumpleaños ya se ha sumado un año, bueno eso queda a elección del programador.
Si la comprobación se extiende a fechas muy antiguas, falla constantemente, ninguna de las funciones tiene en cuenta el desfasaje del calendario.
Saludos