[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]

    {
    I posted some routines on doing calendar math using Integers quite
    a While back. That gives you a relative date of about 89 years. Use
    LongInt For more. Avoids pulling in the Real lib that julian requires.
    Just making them up again as I Type them in the reader. There may be a
    typo or two.
    }

    Function leapyear (c, y : Byte) : Boolean;
    begin
      if (y and 3) <> 0 then
              leapyear := False
      else
            if y <> 0 then
              leapyear := True
      else
            if (c and 3) = 0 then
              leapyear := True
      else
              leapyear := False;
    end;

    Function DaysInMonth (c, y, m : Byte) : Integer;
    begin
      if m = 2 then
              if leapyear then
                      DaysInMonth := 29
        else
                      DaysInMonth := 28
      else
              DaysInMonth := 30 + (($0AB5 shr m) and 1);
    end;

    Function DaysInYear (c, y : Byte) : Integer;
    begin
      DaysInYear := DaysInMonth(c, y, 2) + 337;
    end;

    Function DayOfYear (c, y, m, d :Byte) : Integer;
    Var i, j : Integer;
    begin
      j := d;
        For i := 1 to pred(m) do
                      j := j + DaysInMonth(c,y,i);
      DayOfYear := j;
    end;

[Back to DATETIME SWAG index] [Back to Main SWAG index] [Original]