Microsoft KB Archive/130444

= How To Calculating Years, Months, and Days Between Two Dates =

Article ID: 130444

Article Last Modified on 10/27/2006

-

APPLIES TO


 * Microsoft Visual FoxPro 3.0 Standard Edition
 * Microsoft Visual FoxPro 6.0 Professional Edition
 * Microsoft FoxPro 2.5b
 * Microsoft FoxPro 2.5a
 * Microsoft FoxPro 2.5b
 * Microsoft FoxPro 2.6 Standard Edition
 * Microsoft FoxPro 2.6a Standard Edition
 * Microsoft FoxPro 2.5b for MS-DOS
 * Microsoft FoxPro 2.5a
 * Microsoft FoxPro 2.5b for MS-DOS
 * Microsoft FoxPro 2.6 for MS-DOS
 * Microsoft FoxPro 2.6a Standard Edition

-



This article was previously published under Q130444



SUMMARY
The 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 INFORMATION
To 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, enddate For 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

Keywords: kbhowto KB130444

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.