#if .f. >Hey Tom. > >One thing I'm learning is, everything is in the eye of the beholder. Mark's "reasonable" is different from my reasonable and your reasonable too. > >My original code looked more like this until I shortened it. > ><pre>ldTo = m.ldTo + IIF(m.lnDOWTo >= 2,7 - m.lnDOWTo,-1) > ldFrom = m.ldFrom - IIF(m.lnDOWFrom <= 6,m.lnDOWFrom - 1,0) > lnDays = INT((m.ldFrom - m.ldTo + 1) * 5 / 7) > lnDays = m.lnDays - IIF(m.lnDOWFrom >= 2 AND m.lnDOWFrom <= 6,m.lnDOWFrom - 2,0) > lnDays = m.lnDays - IIF(m.lnDOWTo >= 2 AND m.lnDOWTo <= 6,6 - m.lnDOWTo,0) >RETURN m.lnDays>
ldTo = m.ldTo + IIF(m.lnDOWTo >= 2,7 - m.lnDOWTo,-1) >ldFrom = m.ldFrom - IIF(m.lnDOWFrom <= 6,m.lnDOWFrom - 1,0) >lnGrossDays = (m.ldTo - m.ldFrom + 1) * 5 / 7 >lnFromAdj = IIF(m.lnDOWFrom >= 2 AND m.lnDOWFrom <= 6,m.lnDOWFrom - 2,0) >lnToAdj = IIF(m.lnDOWTo >= 2 AND m.lnDOWTo <= 6,6 - m.lnDOWTo,0) >RETURN m.lnGrossDays - m.lnFromAdj - m.lnToAdj>
>>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 >>