![]() |
Differenz zwischen Datum / Uhrzeit
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:
Die Funktion InJahren ist eine Funktion, die ich hier im Forum gefunden habe, um die Jahre zu bestimmen...
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; 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... :love: Thx UC |
Re: Differenz zwischen Datum / Uhrzeit
wie wäre es, wenn du einfach das Datum in Sekunden umwandelst, diese voneinander subtrahierst und das Ergebnis dann wieder umwandelst in ein Datum?
|
Re: Differenz zwischen Datum / Uhrzeit
Zitat:
|
Re: Differenz zwischen Datum / Uhrzeit
Zitat:
Ein TDateTime ist nix anderes als ein Double. Im Ganzzahligen Anteil steckt das Datum, im Nachkommawert die Uhrzeit. Das Bedeutet: TDateTime(now) - TDateTime(irgendwann) => TDateTime(Differenz) bzw. Double(Differenz). Integer(Double(Differenz)) = Anzahl der Tage dazwischen. Also Integer(Differenz) / 365 = Anzahl der Jahre. Okay, etwas ungenau wenns genau an der Jahresgrenze ist vor allem bei Schaltjahren, aber die lassen sich ja aus den beiden Jahreszahlen genau ermitteln. |
Re: Differenz zwischen Datum / Uhrzeit
Schonmal versucht die beiden Daten mittels
![]() |
Re: Differenz zwischen Datum / Uhrzeit
Ein Zeitdifferenz in Monaten zu zerteilen ist gerade nicht eine sehr gute Idee.
Warum? Weil der Monat keine feste Zeiteinheit ist. Der Monat Februar ist schließlich um eniges kürzer als der Monat August. Grüße Klaus |
Re: Differenz zwischen Datum / Uhrzeit
Zitat:
Schließlich würde dann bei der Berechnung des Jahres 365 als fester Wert gesetzt werden oder eben die Schaltjahrberechnung mit reinkommen und eventuell mit 366 Tagen gerechnet werden oder!? |
Re: Differenz zwischen Datum / Uhrzeit
Zitat:
![]() Grüße Klaus |
Re: Differenz zwischen Datum / Uhrzeit
Also ich habs jetzt so probiert, dass ich den Monat rausgenommen habe und stattdessen Wochen, aber irgendwie häng ich noch am selben Problem...
Solange es 0 Jahre sind, ist alles kein Problem, doch ab einem Jahr wird das Jahr mit angezeigt, jedoch zählen die Wochen weiterhin hoch, z.B. 19 Jahre, 955 Wochen,... Ich weiß aber auch nicht wie ich es verhindern kann, da ich nicht weiß ob ich nun durch 52 oder 53 Teilen muss :/ So sieht man aktueller Quelltext dazu aus:
Delphi-Quellcode:
Wäre gut wenn mir noch jemand helfen könnte, dass mit den Sekunden hochrechnen bekomme ich irgendwie ni so ganz hin, daher hänge ich immer noch an meinem eigenen Quelltext :D
function diff(Datum: TDateTime): string;
var Differenz, jetzt: TDateTime; jahre, monate, tage, h, m, s, ms, woche: Word; begin result := ''; jetzt := Now; Differenz := jetzt - Datum; jahre := InJahren(Datum, Now); woche := WeeksBetween(jetzt, Datum); DecodeTime (Differenz, h, m, s, ms); tage := Trunc(Differenz); if woche <> 0 then tage := tage mod 7; if Jahre <> 0 then result := InttoStr(Jahre) + ' Jahre '; if woche <> 0 then result := result + InttoStr(woche) + ' Woche '; 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; |
Re: Differenz zwischen Datum / Uhrzeit
Hallo,
hast du keinen Zugriff auf die Routinen YearsBetween() und WeeksBetween() aus der Unit DateUtils? Vielleicht solltest du deine Delphi-Version in deinem DP-Profil eintragen... Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz