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:
If one or both of the input dates is the end of the month, DATEDIF takes this into account. This means that the difference between January 31 and April 30 is three months, not two months.
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.
DATEDIF(from_date, to_date, 'component')
where:
Date
Is the start date from which to calculate the difference. Is a full component date.
Date
Is the end date from which to calculate the difference.
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'.
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')
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.
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
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