یک سری کد راحتتر
type
TYMD = Packed record
YY: Byte;
MM: Byte;
DD: Byte;
end;
TLeapYear = Set of Byte;
TMonthLen = Array[1..12] of Byte;
const
DeferDay = 35143;
ZYMD: TYMD = (YY:0;MM:0;DD:0);
LeapYear: TLeapYear = [75,79,83,87,91,95,99,103,107,111,115,119,123,127,1 31,135];
MonthLen: TMonthLen = (31,31,31,31,31,31,30,30,30,30,30,30);
function FDate(x: integer): TYMD;
var
i,j: integer;
x : Integer;
begin
x := Trunc(Now);
x := x - DeferDay;
if x < 0 then
begin
Result := ZYMD;
exit;
end;
i := 74;
Repeat
inc(i);
if i in LeapYear then
j := 366
else
j := 365;
x := x - j;
Until x <= 0;
x := x + j;
Result.YY := i;
i := 0;
Repeat
inc(i);
x := x - MonthLen[i];
Until x <= 0;
Result.MM := i;
Result.DD := x + MonthLen[i];
end;