On 12.11.2013 21:01, waldo kitty wrote:
type Date_Diff = record Years, Months, Days: Word; end;function CalendarDateDiff(Date1,Date2: TDateTime): Date_Diff; var theDiffRec: Date_Diff; Cmp: Integer; loDate,hiDate: TDateTime; loYear,hiYear,loMonth,hiMonth,loDay,hiDay: Word; begin FillChar(theDiffRec,SizeOf(theDiffRec),0); // init results to zero Cmp:=CompareDateTime(Date1,Date2); // compare dates If Cmp<0 then begin loDate:= Date1; // and set loDate to oldest hiDate:= Date2; end else if Cmp>0 then begin loDate:= Date2; // and set loDate to oldest hiDate:= Date1; end; DecodeDate(loDate,loYear,loMonth,loDay); DecodeDate(hiDate,hiYear,hiMonth,hiDay); theDiffRec.Years:= hiYear - loYear;if (loMonth > hiMonth) or ((loMonth = hiMonth) and (loDay > hiDay)) thenbegin theDiffRec.Years:= theDiffRec.Years - 1; end; if loMonth > hiMonth then begin hiMonth:= hiMonth + 12; end; theDiffRec.Months:= hiMonth - loMonth; if hiDay >= loDay then begin theDiffRec.Days:= hiDay - loDay end else begin if theDiffRec.Months = 0 then begin theDiffRec.Months:= 11; end else begin theDiffRec.Months:= theDiffRec.Months - 1; end; theDiffRec.Days:= DaysInAMonth(hiYear,loMonth) - loDay + hiDay; end; Result:= theDiffRec;end;
Which is correct? Date1 := 29.2.2000 Date2 := 28.02.2001 Your function: 0 Y, 11 M, 27 D Rxlib ( Jedi ) DateDiff: 0 Y, 11 M, 28 D Libre Office Calc: 0 Y, 11 M, 30 D The table - function of Libre Office Calc is called in german DATUMDIF() Get a calendar and count?? -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
