OK, I think I’ve ironed out the bugs in my earlier code (test file below). The function doing the work:
function fNumberWorkDays(iStart:date,iEnd:date){
var:number vDays = days(iStart,iEnd);
// day of week of start day
var:number vStartDay = iStart.weekday;
// set a result var for number of workdays in start/end duration
var:number vWorkDays=0;
// number of weekdays within whole weeks
var:number vWorkWeekDays = floor(vDays/7)*5;
// number of days in remaining partial week
var:number vPartialWeekDays = mod(vDays,7);
// work out number of weekdays duration
// add item variables
var:number vNumber1=0;
var:number vNumber2=0;
if(vWorkWeekDays==0){
vNumber1 = vStartDay+vPartialWeekDays;
if(vNumber1>7&vStartDay<6){vNumber2 = vNumber1-vStartDay-2;};
if(vNumber1==7){vNumber2 = vNumber1-2;};
if(vNumber1==6){vNumber2 = vNumber1-1;};
vWorkDays = vNumber2;
}else{
if(vPartialWeekDays>0){
// i.e. 1-6 days of a part week
vNumber1 = vStartDay+vPartialWeekDays;
// if interim count
if(vNumber1>7&vStartDay<6){vNumber2 = vNumber1-vStartDay-2;};
if(vNumber1==7){vNumber2 = vNumber1-2;};
if(vNumber1==6){vNumber2 = vNumber1-1;};
vWorkDays = vWorkWeekDays+vNumber2;
}else{
vWorkDays = vWorkWeekDays;
};
};
return vWorkDays;
}; ///END
In the test file, in the library note for the above function there is a copy of the function called fDebugNumberWorkDays
. It does the same as the above but logs some of the interim variables into a note at path /log
.
The function is called for note at path /Text
via this edict:
$MyNumber = fNumberWorkDays($StartDate,$EndDate);
Buy in actual use I’d put this as an $Edict of a prototype (and setting the prototype’s $EdictDisabled to true
).
Here is the file: ElaspedWorkDays.tbx (173.2 KB)
WARNING. This code cannot account for:
- national/public holidays
- winter/summer time shift using the tested period
- leap years
- … any other weird calendar edge cases!
Command line. A quick web search suggests my hunch was wrong about a ‘simple’ command line solution. However, some built-in code languages like Python appear to be able to do this sort of calculation.
I’d be interested to know how this works for you (and any bugs if found, outside the known warnings above).