Einzelnen Beitrag anzeigen

Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#1

Differenz zwischen Datum / Uhrzeit

  Alt 22. Dez 2006, 11:03
Guten Morgen,

ich habe jetzt schon das ganze Forum durchsucht und auch einiges gefunden und zusammengebastelt, aber egal wie ich es mache, es werden immmer Fehler erzeugt und ich weiß einfach nicht warum

Ich versuche schon die ganze Zeit die Differenz zwischen zwei Daten zu ermitteln, aber entweder der Monat stimmt nicht oder das Jahre. Die beiden Daten werden normal mit DecodeDate und DecodeTime verglichen, aber es stimmt einfach nicht :/

Hier mal mein Quelltext:

Delphi-Quellcode:
function InJahren(const Damals, Heute: TDateTime): Integer;
var
   DamalsTag, DamalsMonat, DamalsJahr: Word;
   HeuteTag, HeuteMonat, HeuteJahr: Word;
begin
  if Heute < Damals then
  begin
     Result := -1
  end
  else
  begin
    DecodeDate (Damals, DamalsJahr, DamalsMonat, DamalsTag);
    DecodeDate (Heute, HeuteJahr, HeuteMonat, HeuteTag);
    Result := HeuteJahr - DamalsJahr;
    if (HeuteMonat <= DamalsMonat) and (HeuteTag < DamalsTag) then
    begin
      Dec (Result);
    end;
  end;
end;

function diff(Datum: TDateTime): string;
var
    Differenz, jetzt: TDateTime;
    jahre, monate, tage, h, m, s, ms : Word;
begin
  result := '';
  jetzt := Now;
  Differenz := jetzt - Datum;
  DecodeDate(Differenz, jahre, monate, tage);
  if MonthsBetween(jetzt, Datum) {DaysBetween(jetzt, Datum)} <> 0 then
    monate := monate - 1
  else
    monate := 0;
  jahre := InJahren(Datum, Now);
  DecodeTime (Differenz, h, m, s, ms);
  if Jahre <> 0 then result := InttoStr(Jahre) + ' Jahre ';
  if Monate <> 0 then result := result + InttoStr(Monate) + ' Monate ';
  if tage <> 0 then result := result + InttoStr(tage) + ' Tage ';
  if h <> 0 then result := result + InttoStr(h) + ' Stunden ';
  if m <> 0 then result := result + InttoStr(m) + ' Minuten ';
  if s <> 0 then result := result + InttoStr(s) + ' Sekunden ';
end;
Die Funktion InJahren ist eine Funktion, die ich hier im Forum gefunden habe, um die Jahre zu bestimmen...

Also, es wird Datum / Uhrzeit als Paramter im folgenden Format eingegeben '05.10.2002 01:00:12' und wird dann mit dem aktuellen Datum / Uhrzeit verglichen und als Ergebnis soll die Differenz in Jahren, Monaten, Tagen, Stunden, Minuten und Sekunden ausgegeben werden, jedoch funktioniert es nicht immer, da die Funktion z.B. am selben Tag nur ein wenig früher "30 Tage" ausgibt, jedoch bei einem Monat vorher den korrekten Wert und verstehe einfach nicht wieso

Hat vielleicht jemand einen Vorschlag, der funktioniert oder einen komplett anderen Ansatz?
Toll wäre natürlich auch, wenn ich anstatt der Monate, die Wochen angeben könnte...


Thx UC
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat