LOCAL lntotaltime,iloops,idates,idays,icycle FOR icycle=1 TO 2 lntotaltime=0 ?IIF(icycle=1,'Legible','Faster')+" Started time:"+TRANSFORM(TIME()) FOR iloops = 1 TO 10 lnstarttime=SECONDS() FOR idates = 1 TO 100000 ldfrom=DATE()-(RAND()*50000) ldto=ldfrom+(RAND()*50000) idays=weekdays(ldfrom,ldto,(icycle=1)) ENDFOR lnendtime=SECONDS() ?SPACE(0) ?"Loop "+TRANSFORM(iloops)+" Elapsed time in seconds:"+TRANSFORM(lnendtime-lnstarttime) lntotaltime=lntotaltime+(lnendtime-lnstarttime) ENDFOR ?IIF(icycle=1,'Legible','Faster')+"Average per loop:"+TRANSFORM(lntotaltime/10) ENDFOR FUNCTION weekdays LPARAMETERS tdFrom, tdTo, tllegible IF VARTYPE(m.tdFrom)#"D" OR VARTYPE(m.tdTo)#"D" RETURN .F. ENDIF LOCAL ldfrom, ldto, lnDOWFrom, lnDOWTo,lnstep1,lnstep2,lnstep3 ldfrom = MIN(m.tdFrom,m.tdTo) ldto = MAX(m.tdFrom,m.tdTo) lnDOWFrom = DOW(m.ldfrom,1) lnDOWTo = DOW(m.ldto,1) IF tllegible lnstep1 = INT(((m.ldto + IIF(m.lnDOWTo >= 2,7 - m.lnDOWTo,-1)); - (m.ldfrom - IIF(m.lnDOWFrom <= 6,m.lnDOWFrom - 1,0)) + 1) * 5 / 7) lnstep2 = IIF(m.lnDOWFrom >= 2 AND m.lnDOWFrom <= 6,m.lnDOWFrom - 2,0) lnstep3 = IIF(m.lnDOWTo >= 2 AND m.lnDOWTo <= 6,6 - m.lnDOWTo,0) RETURN lnstep1 - lnstep2 - lnstep3 ELSE RETURN INT(((m.ldto + IIF(m.lnDOWTo >= 2,7 - m.lnDOWTo,-1)); - (m.ldfrom - IIF(m.lnDOWFrom <= 6,m.lnDOWFrom - 1,0)) + 1) * 5 / 7) ; - IIF(m.lnDOWFrom >= 2 AND m.lnDOWFrom <= 6,m.lnDOWFrom - 2,0) ; - IIF(m.lnDOWTo >= 2 AND m.lnDOWTo <= 6,6 - m.lnDOWTo,0) ENDIF