On 09.11.2013 06:55, leledumbo wrote:
   Date1 := EncodeDate(2012,12,21);
   Date2 := EncodeDate(2013,01,01);

Your code Result is: 1900 Years, 1 Month, 10 days and thats incorrect.

I thought about it some time and found a solution:

Think of the age of an employe! We have now() and his birthday.
How old is he in Years , Months and days?

my code:

uses DateUtils;

function TForm1.CalcDateDif(von, bis: TDateTime): String;
var
  Year, Month, Day: longint;
  YearVon, MonthVon, DayVon : word;
  YearBis, MonthBis, DayBis : word;

begin

  DecodeDate(von, YearVon, MonthVon, DayVon);
  DecodeDate(bis, YearBis, MonthBis, DayBis);

  // whole year:
   year := YearsBetween(von,bis);

  // How many months more than months in "year"
   Month := MonthsBetween(von,bis) - (year * 12);

// Special case: December of previous year as "von" and not a whole Month until "bis": 21.12.2012 until 01.01.2013
  if  (YearBis - YearVon = 1) and (MonthVon = 12) then
   begin
     Day :=  DaysBetween(von,EndOfAYear(YearVon)) + DayOfTheYear(bis);
   end
   else
      Day := DaysBetween(EnCodeDate(YearBis,MonthVon, DayVon), bis) ;

    Result := IntToStr(year) + ' Jahr(e) ';

     Result := Result + IntToStr(Month) + ' Monat(e) ';

    Result := Result + IntToStr(Day) + ' Tag(e) ';

end;

// I have to test that later again, but i think thats ok now?!!
// Going jogging now :-))

But i'm really wondering that Freepascal does not have such a function?!!



--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to