Contributor: DAVID DANIEL ANDERSON { If you are only concerned about dates since 1582, you can translate both the Current date and the Other date into a LONGINT, and subtract one from the other. Below I have a calendar code fragment that writes out the Current date as a LONGINT. It should be a trivial task to integrate it into an operational program, and have it do what you want. {======================[ cut here ]======================} USES DOS; CONST DaysPerYear = 365; TYPE Month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); (* REMEMBER: ORD values for Month are 0..11 - NOT 1..12 ! *) Date = RECORD da: 1..31; mo: Month; yr: 1..9999 END; VAR maxDay: ARRAY [Month] OF INTEGER; daysBefore: ARRAY [Month] OF INTEGER; PROCEDURE GetSysDate(VAR d: Date); (* Reads the system clock and assigns the date to d and the day of the week to dayOfWeek. *) VAR SysYear,SysMonth,SysDay,SysDOW : word; BEGIN GetDate(SysYear,SysMonth,SysDay,SysDOW); d.yr := SysYear; d.mo := Month(SysMonth-1); d.da := SysDay { dayOfWeek := DayType(SysDOW+1); } END; PROCEDURE MonthsInit; VAR mo: Month; BEGIN maxDay[Jan] := 31; maxDay[Feb] := 28; (* adjust for leap years later *) maxDay[Mar] := 31; maxDay[Apr] := 30; maxDay[May] := 31; maxDay[Jun] := 30; maxDay[Jul] := 31; maxDay[Aug] := 31; maxDay[Sep] := 30; maxDay[Oct] := 31; maxDay[Nov] := 30; maxDay[Dec] := 31; daysBefore[Jan] := 0; FOR mo := Jan TO Nov DO daysBefore[Month(ORD(mo)+1)] := daysBefore[mo] + maxDay[mo] END; FUNCTION IsLeapYear(Const yr: INTEGER): BOOLEAN; BEGIN IsLeapYear := ((yr MOD 4 = 0) AND (yr MOD 100 <> 0)) OR (yr MOD 400 = 0) END; FUNCTION NumDays(CONST d: Date): LONGINT; (* NumDays returns an ordinal value for the date with January 1, 0001 assigned the value 1. *) VAR result, leapYears, lYr: LONGINT; BEGIN WITH d DO BEGIN lYr:=yr-1; result := (da); INC(result, daysBefore[mo]); INC(result,lYr * DaysPerYear); leapYears := (lYr DIV 4) - (lYr DIV 100) + (lYr DIV 400); INC(result, leapYears); IF (mo > Feb) AND IsLeapYear(yr) THEN INC(result) END; NumDays := result END; VAR currentDay : date; begin GetSysDate(currentDay); MonthsInit; Writeln(NumDays(currentDay)); end.