HOWTO: Calculating Years, Months, and Days Between Two DatesLast reviewed: March 20, 1998Article ID: Q130444 |
2.50 2.50a 2.50b 2.60 2.60a 3.00| 2.50 2.50a 2.50b 2.60 2.60a
WINDOWS | MS-DOSkbprg kbcode The information in this article applies to:
SUMMARYThe program in this article shows by example how to calculate the combination of days, months, and years between two dates (starting date and ending date) passed as date parameters. NOTE: The starting date must be an earlier date than the ending date.
MORE INFORMATIONTo run the program, save the following code as BTWNDATE.PRG. Then issue the following command where startdate and enddate are date values:
DO BTWNDATE.PRG WITH startdate, enddateFor example:
DO BTWNDATE WITH {01/05/93},{01/05/95} Code Sample
* * 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 convert date |
KBCategory: kbprg kbcode kbhowto
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |