An etwas ähnlichem sitze ich zur Zeit auch, nur gehe ich da einen Objektorientierten Ansatz : Eine Klasse, die Zeitabschnitte verwaltet und Schnittmengen aus 2 Zeiträumen ziehen kann :
Delphi-Quellcode:
{-----------------------------------------------------------------------------
Classname : TTimespan
Autor : e310hel001
Datum : 17-Apr-2012
Aufgabe : Hält einen Zeitabschnitt
-----------------------------------------------------------------------------}
TTimespan = class
private
FStart : TDateTime;
FStop : TDateTime;
function GetTimespan: TDateTime;
procedure SetStop(const Value: TDateTime);
procedure SetStart(const Value: TDateTime);
public
property Start : TDateTime read FStart write SetStart;
property Stop : TDateTime read FStop write SetStop;
property Timespan : TDateTime read GetTimespan;
function IntersectTime ( aTimeSpan : TTimeSpan) : TDateTime;
end;
{ TTimespan }
function TTimespan.GetTimespan: TDateTime;
begin
Result := Stop - Start;
end;
procedure TTimespan.SetStop(const Value: TDateTime);
begin
FStop := Value;
end;
procedure TTimespan.SetStart(const Value: TDateTime);
begin
FStart := Value;
// Stop auf Now setzen, damit ein Gültiger Wert für den Laufenden Zeitraum
// vorhanden ist, auch wenn im Zeitraum kein Stop mehr kommt
Stop := Now;
end;
function TTimespan.IntersectTime(aTimeSpan: TTimeSpan): TDateTime;
begin
Result := Min(Stop,aTimeSpan.Stop) - Max(Start,aTimeSpan.Start);
end;
In die eine Timespan kommen Arbeitsbeginn und Arbeitsende, Timespan leifert dann die Arbeitszeit.
In eine andere z.B. 18.00 Uhr als Start und 20.00 Uhr als Ende. IntersectTime liefert dann die Zeitspanne, für die Zuschläge gezahlt werden müßen. Gleiches gilt z.B. auch für Pausen