Improve company productivity with a Business Account.Sign Up

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

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
Asked:
hidrau
1 Solution
 
Russell LibbySoftware Engineer, Advisory Commented:
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
 
hidrauAuthor 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.

Join & Write a Comment

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now