DATEDIF: Finding the Difference Between Two Dates

How to:

Available Languages: reporting, Maintain

The DATEDIF function returns the difference between two full component standard dates in units of a specified component. A component is one of the following:

DATEDIF returns a whole number. If the difference between two dates is not a whole number, DATEDIF truncates the value to the next largest integer. For example, the number of years between March 2, 2001, and March 1, 2002, is zero. If the end date is before the start date, DATEDIF returns a negative number.

You can find the difference between non-day based dates (for example YM or YQ) directly without using DATEDIF.

Since Dialogue Manager interprets a date as alphanumeric or numeric, and DATEDIF requires a standard date stored as an offset from the base date, do not use DATEDIF with Dialogue Manager unless you first convert the variable used as the input date to an offset from the base date.

DATEDIF works only with full component dates.

Syntax: How to Find the Difference Between Two Dates

DATEDIF(from_date, to_date, 'component')

where:

from_date

Date

Is the start date from which to calculate the difference. Is a full component date.

to_date

Date

Is the end date from which to calculate the difference.

component

Alphanumeric

Is one of the following enclosed in single quotation marks:

Y indicates a year unit.

M indicates a month unit.

D indicates a day unit.

WD indicates a weekday unit.

BD indicates a business day unit.

Note: DATEDIF does not use an output argument because for the result it uses the format 'I8'.

Example: Truncation With DATEDIF

DATEDIF calculates the difference between March 2, 1996, and March 1, 1997, and returns a zero because the difference is less than a year:

DATEDIF('19960302', '19970301', 'Y')

Example: Using Month Calculations

The following expressions return a result of minus one month:

DATEDIF('19990228', '19990128', 'M')
DATEDIF('19990228', '19990129', 'M')
DATEDIF('19990228', '19990130', 'M')
DATEDIF('19990228', '19990131', 'M')

Additional examples:

DATEDIF( 'March 31 2001', 'May 31 2001', 'M') yields 2.

DATEDIF( 'March 31 2001', 'May 30 2001', 'M') yields 1 (because May 30 is not the end of the month).

DATEDIF( 'March 31 2001', 'April 30 2001', 'M') yields 1.

Example: Finding the Number of Weekdays Between Two Dates (Reporting)

DATECVT converts the legacy dates in HIRE_DATE and DAT_INC to the date format YYMD. DATEDIF then uses those date formats to determine the number of weekdays between NEW_HIRE_DATE and NEW_DAT_INC:

TABLE FILE EMPLOYEE
PRINT FIRST_NAME AND
COMPUTE NEW_HIRE_DATE/YYMD = DATECVT(HIRE_DATE, 'I6YMD', 'YYMD'); AND
COMPUTE NEW_DAT_INC/YYMD = DATECVT(DAT_INC, 'I6YMD', 'YYMD'); AND
COMPUTE WDAYS_HIRED/I8 = DATEDIF(NEW_HIRE_DATE, NEW_DAT_INC, 'WD');
BY LAST_NAME
IF WDAYS_HIRED NE 0
WHERE DEPARTMENT EQ 'PRODUCTION';
END

The output is:

LAST_NAME     FIRST_NAME  NEW_HIRE_DATE  NEW_DAT_INC  WDAYS_HIRED
---------     ----------  -------------  -----------  -----------
IRVING        JOAN        1982/01/04     1982/05/14   94
MCKNIGHT      ROGER       1982/02/02     1982/05/14   73
SMITH         RICHARD     1982/01/04     1982/05/14   94
STEVENS       ALFRED      1980/06/02     1982/01/01   414
              ALFRED      1980/06/02     1981/01/01   153

Example: Finding the Number of Years Between Two Dates (Maintain)

DATEDIF determines the number of years between DATE2 and DATE1:

MAINTAIN 
Case Top
compute DATE1/yymd = '20020717';
compute DATE2/yymd = '19880705';
compute DIFF/I3= DATEDIF(DATE2, DATE1, 'Y', DIFF);
type "<<DATE1  -  <<DATE2  = <DIFF  YEARS"
ENDCASE
END

The result is:

2002/07/17 -  1988/07/05 = 14 YEARS