Here is my test code. I'm still not getting values I would expect. For instance, I would expect 6/3/02 to 6/4/02 to return 1, but 6/2/02 to 6/3/02 to return 0.
code:
FOR $i = 1 TO 7
FOR $j = 1 TO 7
$tDt=Flip_SerDate(@DATE)
$sDt=Flip_SerDate($tDt - ($j + $i))
'The start date is: ' + $sDt ?
$eDt=Flip_SerDate($tDt - $j)
'The end date is: ' + $eDt ?
'Elapsed week days: ' + WeekDaysDiff($sDt,$eDt) ? ?
NEXT
NEXT
FUNCTION WeekDaysDiff($sStrtDte, $sEndDte)
DIM $iDaysDiff, $iStrtDte, $iEndDte, $iWeeks
$iStrtDte = Flip_SerDate($sStrtDte)
$iEndDte = Flip_SerDate($sEndDte)
$iDaysDiff = $iEndDte - $iStrtDte + 1
$iDaysDiff = $iDaysDiff - @WDAYNO
$iWeeks = $iDaysDiff / 7
$iDaysDiff = $iDaysDiff-(($iDaysDiff/7)*7) ; $iDaysDiff mod 7
$WeekDaysDiff = $iDaysDiff + ($iWeeks * 5) + @WDAYNO
ENDFUNCTION
FUNCTION Flip_SerDate($Var)
; Parameter $Var must be either a date (yyyy/mm/dd) or an integer previously
; derived by this function.
; If passed a date, it returns an integer and vice versa.
; Algorithms were obtained from: http://www.capecod.net/~pbaum/date/date0.htm
DIM $Z, $H, $A, $B, $C, $Y, $M, $D, $aDate
IF InStr($Var,'/') ; date passed
$aDate = Split($Var+'///','/',3)
$Y=Val($aDate[0]) $M=Val($aDate[1]) $D=Val($aDate[2])
IF $M < 3 $M=$M+12 $Y=$Y-1 ENDIF
; return an integer
$Flip_SerDate=$D+(153*$M-457)/5+365*$Y+$Y/4-$Y/100+$Y/400-306
ELSE ; integer passed
$Z = Val($Var)+306 ; force numeric
$H = 100*$z-25
$A = $H/3652425
$B = $A-$A/4
$Y = (100*$B+$H)/36525
$C = $B+$Z-365*$Y-$Y/4
$M = (5*$C+456)/153
$D = $C-(153*$M-457)/5
IF $M > 12 $Y=$Y+1 $M=1 ENDIF
$M=Right('00'+$M,2)
$D=Right('00'+$D,2)
; return a string date
$Flip_SerDate=''+$Y+'/'+$M+'/'+$D
ENDIF
ENDFUNCTION
[ 04 June 2002, 22:49: Message edited by: New Mexico Mark ]