You're welcome. I look forward to the new version. BTW I was starting to think you were getting annoyed.
>Thanks for the example Mike, I DO get 11 and I know the fix! I will post the abbreviated technique later today.
>
>Thanks
>
>Glenn
>
>>Hi Glenn
>>
>>Do you get 11 days for this? workdays({^2003-06-11},{^2003-06-04})
>>
>>>I do not understand!
>>>
>>>CLEAR
>>>
>>>ld={^2003/06/06}
>>>hd={^2003/06/11}
>>>
>>>? INT( (hd - ld) / 7)
>>>? IIF(DOW(ld,2) < 6, 6-DOW(ld,2),0)
>>>? IIF(DOW(hd,2) < 6, DOW(hd,2),0)
>>>
>>>
>>>
>>>wks = 0
>>>Days before = 1
>>>Days after = 3
>>>
>>>ergo 4.
>>>
>>>How did you calculate
>>>
>>>5 + 3 + 3
>>>
>>>Notice I used dow(datevar,2) for Monday being the first day of the week.
>>>
>>>Glenn
>>>
>>>
>>>
>>>
>>>
>>>>Hi Glenn
>>>>
>>>>I'm getting 11 days. The last line of code equates to 5 + 3 + 3 which is 11.
>>>>
>>>>>When I run the code in this message with {^2003/06/06} and {^2003/06/11} I get 4. What do you get? I sure hope 4!
>>>>>
>>>>>Glenn
>>>>>
>>>>>>Hi Glenn
>>>>>>
>>>>>>I did copy your code. I made a typo in the dates I gave you. I used June 6, 2003 to June 11, 2003.
>>>>>>
>>>>>>
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) )
>>>>>>
>>>>>>
>>>>>>>You must not have copied my code from this page because with this code I get 4, not 11. I admit 4 is incorrect but I am still debugging. I will post an improved version in a few minutes.
>>>>>>>
>>>>>>>Thanks for the critique
>>>>>>>
>>>>>>>Glenn
>>>>>>>
>>>>>>>C O R R E C T I O N ----
>>>>>>>
>>>>>>>Fri - Mon - Tue - Wed
>>>>>>>
>>>>>>> 4 IS correct!
>>>>>>>
>>>>>>>>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.