/*----------------------------------------------------------------------
------
Name : MonthDiff
Desc : Calculate the difference between 2 dates as months and days.
------------------------------------------------------------------------
----*/
define input parameter pitStartDate as date no-undo.
define input parameter pitEndDate as date no-undo.
define output parameter poiMonths as integer no-undo.
define output parameter poiDays as integer no-undo. define variable dStartDate as decimal no-undo.
define variable dEndDate as decimal no-undo.
define variable dDiff as decimal no-undo.
define variable tTmpDate as date no-undo.
define variable iDaysInStartMonth as integer no-undo.
define variable iDaysInEndMonth as integer no-undo.
/* swap dates if End < Start */
if pitStartDate > pitEndDate then
assign
tTmpDate = pitStartDate
pitStartDate = pitEndDate
pitEndDate = tTmpDate.
/* calculate nr of days in start month */
assign
tTmpDate = date(month(pitStartDate),15,year(pitStartDate))
+ 20.
tTmpDate = tTmpDate - day(tTmpDate).
iDaysInStartMonth = day(tTmpDate).
/* calculate start date as decimal */
dStartDate = year(pitStartDate) * 12 + month(pitStartDate) +
(day(pitStartDate) / iDaysInStartMonth ).
/* calculate nr of days in end month */
assign
tTmpDate = date(month(pitEndDate),15,year(pitEndDate)) + 20.
tTmpDate = tTmpDate - day(tTmpDate).
iDaysInEndMonth = day(tTmpDate).
/* calculate end date as decimal */
dEndDate = year(pitEndDate) * 12 + month(pitEndDate) +
(day(pitEndDate) / iDaysInEndMonth ).
/* calculate difference in months and days */
assign
dDiff = (dEndDate - dStartDate)
poiMonths = truncate(dDiff,0)
poiDays = ( dDiff - poiMonths ) * iDaysInStartMonth .
end procedure. /* MonthDiff */