x
• Status: Solved
• Priority: Medium
• Security: Public
• Views: 163

# I need a function that could return me the day worked.

Hello guys

I need a function that could return me a quantity of days without weekend, since my first day of the month.

Thanks
0
hidrau
1 Solution

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)));
0

Author Commented:
thanks

I tested and it is working.
If I have any problem I'll let you know
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.