Glenn
I see you're trying something like what I posted. I like how you're trying to reduce the code's length. But, given June 11, 2003 and June 6, 2003 your version returns 11 days. Counting the days on the calendar I get 5 days.
The random testing makes it impossible to determine if one routine is faster than another.
>Thanks, here is a newer version which also is based upon weeks but in a different way.
>
>LPARAMETERS dDate1, dDate2
>LOCAL wks, wkd
>
>hd = MAX(ddate1,ddate2)
>ld = Min(ddate1,ddate2)
>
>wks = INT( (hd - ld)/ 7)
>
>* Return Weeks * 5 which is overal workdays
>* Adjust for starting day of the first week
>* And adjust for the last partial week
>
>RETURN ;
> INT(wks * 5 + ;
> IIF(DOW(ld,2) < 6, 6-DOW(ld,2),0) + ;
> IIF(DOW(hd,2) < 6, DOW(hd,2),0) )
>
>
>
>On my computer (AMD 1.6g 256mb) a 100,000 randomized test took 2.031 seconds including the considerable overhead of the test itself.
>
>ld = RAND(-1)
>nStart = SECONDS()
>FOR i = 1 TO 100000
> noffset = INT(RAND()* 36)
> ld = GOMONTH(DATE(),1-noffset)
> hd = GOMONTH(DATE(),noffset)
> wkd = workdays(ld,hd)
>ENDFOR
>MESSAGEBOX('Execution time was '+TRANSFORM(SECONDS()-nstart)+' seconds')
>
>
>
>What do you think of this version?
>
>Thanks
>
>Glenn
>
>
>>Glenn,
>>
>>That code will fail if the dates cross a year boundary or are more than a year apart.
>>
>>>I needed a solution to determine the number of workdays between two dates and have not been satisfied with the prevalent techniques.