Calculating Business Days Between Two Dates


Button:
Check := @If(Startdate = ""; 1; EndDate = ""; 1; 0);
@If(Check; @Do(@Prompt([OK]; "No Values"; "You must enter starting and ending
dates."); @Return("")); "");
HolidayList := @DbColumn(""; ""; "($Holidays)"; 2);
@SetField("Holidays"; HolidayList);
@Environment("HolidayList"; @Implode(HolidayList; ";"));
@Environment("Iterations"; @Text(((EndDate - StartDate) / (24 * 60 * 60)) + 1));
@Environment("StartDate"; @Text(StartDate));
@Environment("SlidingDate"; @Text(StartDate));
@Environment("EndDate"; @Text(EndDate));
@Environment("WorkDays"; "0");
@Command([FileSave]);
@Command([FileCloseWindow]);
@Command([ToolsRunMacro]; "($Add-A-Day)")
Execute-Once Macro "($Add-A-Day)":
REM "ADD-A-DAY Macro";
REM "Recursive macro to check if dates fall on weekends ";
REM "and holidays and increment a working day count.";
REM "Retrieve all the environment variable";
Iterations := @TextToNumber(@Environment("Iterations"));
Sdate := @TextToTime(@Environment("SlidingDate"));
EndDate := @TextToTime(@Environment("EndDate"));
WorkDays := @TextToNumber(@Environment("WorkDays"));
Holidays := @Explode(@Environment("HolidayList"); ";");
REM "Calculate Add a Day - will be zero or one";
AddDay := @If(@Weekday(Sdate) = 1; 0; @Weekday(Sdate) = 7; 0; Sdate > EndDate;
0; @Text(Sdate) = Holidays; 0; 1);
REM "Check if there are any more iterations to do";
REM "If not, call a macro to update the fields";
REM "If yes, then save the new values and call the recursion routine";
@If(Iterations = 0; @Do(@Command([ToolsRunMacro]; "($SetNumDaysField)");
@Command([EditDocument]; "1")); @Do(@Environment("Iterations"; @Text(Iterations
- 1)); @Environment("SlidingDate"; @Text(@Adjust(Sdate; 0; 0; 1; 0; 0; 0)));
@Environment("WorkDays"; @Text(WorkDays + AddDay)); @Command([ToolsRunMacro];
"($Recurs-Add)")));
SELECT @All
Execute-Once Macro "($Recurs-Add)":
@Command([ToolsRunMacro]; "($Add-A-Day)");
SELECT @All
Filter Macro "($Recurs-Add)":
FIELD NumDays := @Environment("WorkDays");
SELECT @All

This was first published in November 2000

Dig Deeper

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

-ADS BY GOOGLE

SearchWindowsServer

Search400

  • iSeries tutorials

    Search400.com's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...

SearchEnterpriseLinux

SearchDataCenter

SearchExchange

SearchContentManagement

Close