>>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 >>