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

    {===========================================================================
    Date: 10-04-93 (12:39)
    From: ANDREW KEY
    Subj: What is NEXT day ??
    ---------------------------------------------------------------------------
     AC> My assignment is to write a program, given three integers whose values
     AC> represent a day between January 1, 1900 and December 30, 1999, will
     AC> output the value representing the day following.

     AC> I am running into problems with three things.  The end of a month, the
     AC> end of a year, and leap years.

    Here's a procedure you might get some ideas from... }

    procedure NextDay(var MM,DD,YYYY: integer);
      const
        DaysInMonth: array[0..1,1..12] of integer =
          ((31,28,31,30,31,30,31,31,30,31,30,31),   {regular year}
           (31,29,31,30,31,30,31,31,30,31,30,31));  {leap year}
      var
        Leap: integer;
      begin
        Inc(DD);                            {increment day}
        if (YYYY mod 4) = 0 then            {is it a leap year?}
          Leap:=1                           {Leap year}
        else
          Leap:=0;                          {non-leap year}
        if DD>DaysInMonth[Leap,MM] then     {is DD > the end of the month?}
          begin
            DD:=1;                          {set to 1st of month}
            Inc(MM);                        {increment month by one}
            if MM>12 then                   {is MM > December?}
              begin
                MM:=1;                      {set MM to January}
                Inc(YYYY);                  {and increment YYYY}
              end; {if MM>12}
          end; {if DD>Days}
      end; {proc NextDay}

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