// Es werden Differenzen zwischen zwei Zeitpunkten berechnet.
// (Siehe auch
Tage, Monate oder Jahre zu einem Datum addieren)

// Getestet mit D4 unter Win98

// 1. Diese Funktion berechnet die Anzahl der Tage, die zwischen 
//    zwei Kalendertagen (einschließlich dem letzten Tag) verflossen sind. 
//    (Das benötigt man z.B. um einen julianischen Kalender zu erstellen) 
 
function diff(erstertag, zweitertag: string): integer; 
var 
  e, z: TDate; 
begin 
  e := strtodate(erstertag); 
  z := strtodate(zweitertag); 
  result := trunc(z - e + 1); 
end; 
 
 
// Beispielaufruf 

procedure TForm1.Button3Click(Sender: TObject); 
var se, sz: string; 
begin 
  se := '1.1.2000'; 
  sz := '15.2.2000'; 
  showmessage('Vom ' + se + ' bis einschließlich dem ' + sz + 
    ' sind ' + inttostr(diff(se, sz)) + ' Tage vergangen.'); 
end;

// -------------------------------------------------------------------

// 2. Diese Funktion berechnet Tage, Stunden, Minuten und Sekunden, 
//    welche zwischen zwei Zeitpunkten liegen. 
 
function differenz(Start, Ende: string; 
  var tge, std, min, sek: integer): boolean; 
var dt, h: Double; 
begin 
  try 
    dt := strtodatetime(Ende) - strtodatetime(Start); 
    tge := trunc(dt); 
    h := frac(dt); 
    std := trunc(h * 24); 
    min := trunc(h * 1440) mod 60; 
    sek := round(h * 86400) mod 60; 
    result := true; 
  except 
    result := false; 
  end; 
end; 
 
 
// Beispielaufruf 
 
procedure TForm1.Button3Click(Sender: TObject); 
var Tage, Stunden, Minuten, Sekunden: integer; 
  Von, Bis: string; 
begin 
  Von := '24.12.1999 10:02:32'; 
  Bis := '1.1.00 12:17'; 
  if differenz(Von, Bis, Tage, Stunden, Minuten, Sekunden) 
    then 
    showmessage(inttostr(tage) + ' Tag(e)'#13#10 + 
      inttostr(stunden) + ' Stunde(n)'#13#10 + 
      inttostr(minuten) + ' Minute(n)'#13#10 + 
      inttostr(sekunden) + ' Sekunde(n)') 
  else 
    showmessage('FEHLER!'); 
end;

// -------------------------------------------------------------------

// 3. Die folgende Funktion berechnet eine Zeitdifferenz innerhalb 
//    von 24 Stunden, auch wenn die Anfangszeit vor Mitternacht 
//    und die Endzeit nach Mitternacht liegt. 
 
function StdMinSek(von, bis: TTime): string; 
begin 
  result := formatdatetime('h:mm:ss', bis + ord(von > bis) - von); 
end; 
 
// Beispielaufruf

procedure TForm1.Button3Click(Sender: TObject); 
begin 
  showmessage(StdMinSek(StrToTime('22:35:07'), StrToTime('4:57:13'))); 
end;


// -------------------------------------------------------------------

// 4. Hiermit werden die vollen Jahre zwischen zwei Zeitpunkten berechnet
//    (z.B. das Alter).

function JahresDiff(s1, s2: string): string; 
var 
  t1, t2, m1, m2, j1, j2: word; 
  jahre, monate, tage: integer; 
  d1, d2, dh: TDate; 
begin 
  d1 := strtodate(s1); 
  d2 := strtodate(s2); 
  if d1 > d2 then begin 
    dh := d1; 
    d1 := d2; 
    d2 := dh; 
  end; 
  decodedate(d1, j1, m1, t1); 
  decodedate(d2, j2, m2, t2); 
  jahre := j2 - j1; 
  monate := m2 - m1; 
  tage := t2 - t1; 
  if tage < 0 then dec(monate); 
  if monate < 0 then dec(jahre); 
  result := inttostr(jahre); 
end; 
 
// Beispielaufruf 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
  try 
    Edit1.Text := JahresDiff('1.3.2000', '31.12.2005'); 
  except 
    Edit1.Text := 'Fehler bei Datumseingabe'; 
  end; 
end;


// -------------------------------------------------------------------


// 5. Altersberechnung nach Jahren.

function rech(Datum: string): integer; 
var 
  w1, w2, dummy: word; 
  D: TDate; 
begin 
  D := StrToDate(Datum); 
  DecodeDate(Date, w1, dummy, dummy); 
  DecodeDate(D, w2, dummy, dummy); 
  Result := w1 - w2; 
  if FormatDateTime('mmdd', Date) < 
    FormatDateTime('mmdd', D) then dec(result); 
end; 
 
// Beispielaufruf 
 
procedure TForm1.Button5Click(Sender: TObject); 
begin 
  showmessage(intToStr(rech('24.10.1948'))); 
end;


// -------------------------------------------------------------------


// 6. Einfache Altersberechnung.

function Alter(Geburtstag: string): integer; 
begin 
  result := trunc((now - strtodate(Geburtstag)) / 365.2425); 
end; 
 
// Beispielaufruf 
 
procedure TForm1.Button3Click(Sender: TObject); 
var 
  a: integer; 
begin 
  a := Alter('18.5.1968'); 
  showmessage('Alter: ' + inttostr(a)); 
end;

// Querverweis: das Alter aus dem Geburtstag errechnen


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke