home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
database
/
trl14db.zip
/
TRLPRG.EXE
/
INMONTHS.PRG
< prev
next >
Wrap
Text File
|
1990-10-22
|
2KB
|
46 lines
***********
* INMONTHS.PRG
* by Tom Rettig and Leonard Zerman
* Placed in the Public Domain by Tom Rettig Associates, 10/22/1990.
*
* SYNTAX: DO INMONTHS WITH <start date>, <end date>
* RETURN: <expN> number of months between two dates
* NOTE : Result is affected by the current state of SET DECIMALS
***********
PARAMETERS tr_start, tr_end
PRIVATE tr_ld_st, tr_ld_nd
DO CASE
CASE tr_start > tr_end
* Error -- start date is greater than end date
tr_retn = -1
CASE MONTH(tr_start) = MONTH(tr_end) .AND. YEAR(tr_start) = YEAR(tr_end)
* Start and end dates are the same month and year
DO LASTDAY WITH MONTH( tr_end ), YEAR( tr_end )
tr_retn = ( DAY( tr_end ) - DAY( tr_start ) + 1 ) / tr_retn
OTHERWISE
* Start and end dates are different MONTHs and/or years
PRIVATE tr_month
IF YEAR( tr_start ) = YEAR( tr_end )
tr_month = ( MONTH( tr_end ) - MONTH( tr_start )) - 1
ELSE
* Get months from first and last years
tr_month = ( 12 - MONTH( tr_start )) + ( MONTH( tr_end ) - 1 )
* Add in between years if any
IF ( YEAR( tr_end ) - YEAR( tr_start )) > 1
tr_month = tr_month + ( 12 * ( YEAR(tr_end) - YEAR(tr_start) - 1))
ENDIF
ENDIF
DO LASTDAY WITH MONTH( tr_start ), YEAR( tr_start )
tr_ld_st = tr_retn
DO LASTDAY WITH MONTH( tr_end ), YEAR( tr_end )
tr_ld_nd = tr_retn
tr_retn = (((( tr_ld_st ) - ( DAY( tr_start ) -1 )) / tr_ld_st )) + ;
tr_month + ( DAY( tr_end ) / tr_ld_nd )
* in between months = tr_month
* last month = ( DAY(tr_end) / LASTDAY(MONTH(tr_end), YEAR(tr_end)) )
ENDCASE
IF fox
RETURN (tr_retn)
ENDIF
* eof inmonths *