Give this a try, I believe it is pretty well tested. I wasn't sure if you were counting today in the result, or not (eg, if you consider today-yesterday = 2 days, or 1 day), so the function allows you to specify that.

As to the function, it determines how many weeks (full 7 days) have passed. That part is easy, because 7 days = 5. The remainer needs to be figured out based on day of the week that that the StartDate falls. (determine if the day count wraps into a weekend).

Regards,

Russell

----

function DaysWorkedSince(StartDate: TDateTime; IncludeToday: Boolean = False): Integer;

var dwDay: Integer;

dwTotal: Integer;

dwWeeks: Integer;

dwDays: Integer;

begin

// Get the day of week for the starting day (0 = Sunday and 6 = Saturday)

dwDay:=DateTimeToTimeStamp(StartDate).Date mod 7;

// Subtract today and start date

dwTotal:=Trunc(Now - StartDate);

// Update by 1 if today should be included

if IncludeToday then Inc(dwTotal);

// Calculate the number of total weeks and remainder days

dwWeeks:=dwTotal div 7;

dwDays:=dwTotal mod 7;

// Weeks = 5 working days

result:=dwWeeks * 5;

// Check remainder days

if (dwDays > 0) then

begin

// Now figure in the days based on the starting date

case dwDay of

0 : Dec(dwDays);

1 : if (dwDays > 5) then dwDays:=5;

2 : if (dwDays > 4) then dwDays:=4;

3 :

begin

if (dwDays = 6) then

dwDays:=4

else if (dwDays > 3) then

dwDays:=3;

end;

4 :

begin

if (dwDays > 3) then

Dec(dwDays, 2)

else if (dwDays = 3) then

dwDays:=2;

end;

5 :

begin

if (dwDays > 2) then

Dec(dwDays, 2)

else if (dwDays = 2) then

dwDays:=1;

end;

6 :

begin

if (dwDays > 2) then

Dec(dwDays, 2)

else

dwDays:=0;

end;

end;

// Update result

Inc(result, dwDays);

end;

end;

ShowMessage(IntToStr(DaysWorkedSince(StrToDate('5/1/2008'), True)));

As to the function, it determines how many weeks (full 7 days) have passed. That part is easy, because 7 days = 5. The remainer needs to be figured out based on day of the week that that the StartDate falls. (determine if the day count wraps into a weekend).

Regards,

Russell

----

function DaysWorkedSince(StartDate:

var dwDay: Integer;

dwTotal: Integer;

dwWeeks: Integer;

dwDays: Integer;

begin

// Get the day of week for the starting day (0 = Sunday and 6 = Saturday)

dwDay:=DateTimeToTimeStamp

// Subtract today and start date

dwTotal:=Trunc(Now - StartDate);

// Update by 1 if today should be included

if IncludeToday then Inc(dwTotal);

// Calculate the number of total weeks and remainder days

dwWeeks:=dwTotal div 7;

dwDays:=dwTotal mod 7;

// Weeks = 5 working days

result:=dwWeeks * 5;

// Check remainder days

if (dwDays > 0) then

begin

// Now figure in the days based on the starting date

case dwDay of

0 : Dec(dwDays);

1 : if (dwDays > 5) then dwDays:=5;

2 : if (dwDays > 4) then dwDays:=4;

3 :

begin

if (dwDays = 6) then

dwDays:=4

else if (dwDays > 3) then

dwDays:=3;

end;

4 :

begin

if (dwDays > 3) then

Dec(dwDays, 2)

else if (dwDays = 3) then

dwDays:=2;

end;

5 :

begin

if (dwDays > 2) then

Dec(dwDays, 2)

else if (dwDays = 2) then

dwDays:=1;

end;

6 :

begin

if (dwDays > 2) then

Dec(dwDays, 2)

else

dwDays:=0;

end;

end;

// Update result

Inc(result, dwDays);

end;

end;

ShowMessage(IntToStr(DaysW