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.