Article ID: 130444
Article Last Modified on 10/27/2006
DO BTWNDATE.PRG WITH startdate, enddateFor example:
DO BTWNDATE WITH {01/05/93},{01/05/95}
*
* BTWNDATE.PRG
*
PARAMETERS startdate, enddate
IF startdate > enddate
WAIT WINDOW "Start date must " + CHR(13) ;
+ "be earlier than End date"
RETURN
ENDIF
IF PARAMETERS() <> 2
WAIT WINDOW "Not Correct Number of Parameters"
RETURN
ENDIF
PRIVATE precmpdate, vyears, vmonths, vdays
precmpdate={}
vyears=0
vmonths=0
vdays=0
* Calculate:
* endofmonth is the last day of month prior to month of enddate
*
endofmonth = CTOD(ALLTRIM(STR(MONTH(enddate))) + '/' + "01" + '/' + ;
ALLTRIM(STR(YEAR(enddate)))) - 1
*
IF MONTH(startdate) <= MONTH(enddate)
vyears = YEAR(enddate) - YEAR(startdate)
IF DAY(startdate) <= DAY(enddate)
vmonths = MONTH(enddate) - MONTH(startdate)
vdays = DAY(enddate) - DAY(startdate)
ELSE
IF MONTH(startdate) = MONTH(enddate)
vyears = vyears - 1
ENDIF
vmonths = MOD(MONTH(enddate) - MONTH(startdate) - 1 + 12, 12)
vdays = endofmonth - precmpdate + DAY(enddate)
ENDIF
ELSE
vyears = YEAR(enddate) - YEAR(startdate) - 1
IF DAY(startdate) > DAY(enddate)
vmonths = MONTH(enddate) - MONTH(startdate) + 12 - 1
vdays = endofmonth - precmpdate + DAY(enddate)
ELSE
vmonths = MONTH(enddate) - MONTH(startdate) + 12
vdays = DAY(enddate) - DAY(startdate)
ENDIF
ENDIF
CLEAR
WAIT WINDOW CHR(13) + ;
' Years: ' + STR(vyears) + CHR(13) + ;
' Months: ' + STR(vmonths) + CHR(13) + ;
' Days: ' + STR(vdays) + CHR(13) + ;
CHR(13) + ;
' Between ' + DTOC(startdate) + CHR(13) +;
' and ' + DTOC(enddate)
RETURN
Keywords: kbhowto KB130444