|
Joel, this code subtract EDATE from #SYSDT and result is send to DYSLFT. Then you can subtract 7 from DYSLFT to achieve 7 days before today's date. Create an source file for RPGLE, add the attached as a member and compile it to use in your RPG/400 program. C MOVEL #TODAY #SYSDT C CALL 'SUBDAT' C PARM RTNCDE C PARM #SYSDT STRDAT C PARM STRFMT C PARM EDATE ENDDAT C PARM ENDFMT C DYSLFT PARM DURATN C PARM DURFMT C C DYSLFT SUB 7 DYSLFT ----- Original Message ----- From: "Joel Kahsay" <jkahsay@hotmail.com> To: <oludare@ix.netcom.com> Sent: Wednesday, April 19, 2000 9:59 AM Subject: Re: Date calculation in rpg > Hi dare and thank you > > I have RPG/400 can you show me an example? > > Joel > > > ______________________________________________________ > Get Your Private, Free Email at http://www.hotmail.com >
0010 H datfmt(*ISO)
0020 D dtStart S D
0030 D dtEnd S D
0040 D nDays S 7P 0
** ERROR return codes
0050 D BADSTRDTE C Const(201)
0060 D BADSTRFMT C Const(202)
0070 D BADENDDTE C Const(203)
0080 D BADENDFMT C Const(204)
0090 D BADDURFMT C Const(205)
0100 D NODATEDUR C Const(206)
0110 D rtnCode S 7P 0
0120 D StartDate S 7P 0
0130 D StartFmt S 10A
0140 D EndDate S 7P 0
0150 D endFmt S 10A
0160 D nDur S 7P 0
0170 D durFmt S 10A
0180 C *ENTRY PList
0190 C Parm rtnCode
0200 C Parm StartDate
0210 C Parm startFmt
0220 C Parm EndDate
0230 C Parm endFmt
0240 C Parm nDur
0250 C Parm durFmt
0260 C Select
0270 C When startFmt = '*MDY'
0280 C *MDY TEST(D) startDate 73
0290 C n73*MDY Move startDate dtStart
0300 C When startFmt = '*YMD'
0310 C *YMD TEST(D) startDate 73
0320 C n73*YMD Move startDate dtStart
0330 C When startFmt = '*DMY'
0340 C *DMY TEST(D) startDate 73
0350 C N73*DMY Move startDate dtStart
0360 C When startFmt = '*JUL'
0370 C *JUL TEST(D) startDate 73
0380 C n73*JUL Move startDate dtStart
0390 C When startFmt = '*CYMD'
0400 C *CYMD TEST(D) startDate 73
0410 C n73*CYMD Move startDate dtStart
0420 C other
0430 C eval rtncode = BADSTRFMT
0440 C return
0450 C endSL
0460 C If *IN73
0470 C eval rtncode = BADSTRDTE
0480 C return
0490 C endif
0500 C if endFmt = *BLANKS
0510 C eval endFmt = startFmt
0520 C endIf
0530 C Select
0540 C When endFmt = '*MDY'
0550 C *MDY TEST(D) endDate 73
0560 C n73*MDY Move endDate dtEnd
0570 C When endFmt = '*YMD'
0580 C *YMD TEST(D) endDate 73
0590 C n73*YMD Move endDate dtEnd
0600 C When endFmt = '*DMY'
0610 C *DMY TEST(D) endDate 73
0620 C n73*DMY Move endDate dtEnd
0630 C When endFmt = '*JUL'
0640 C *JUL TEST(D) endDate 73
0650 C n73*JUL Move endDate dtEnd
0660 C When endFmt = '*CYMD'
0670 C *CYMD TEST(D) endDate 73
0680 C n73*CYMD Move endDate dtEnd
0690 C other
0700 C eval rtncode = BADENDFMT
0710 C endSL
0720 C If *IN73
0730 C eval rtncode = BADENDDTE
0740 C return
0750 C endif
0760 C Select
0770 C When durFmt = '*DAYS' or
0780 C durFmt = '*D' or durFmt = '*DAY'
0790 C dtEnd SubDur dtStart nDur:*DAYS
0800 C When durFmt = '*MONTHS' or
0810 C durFmt = '*M' or durFmt = '*MONTH'
0820 C dtEnd SubDur dtStart nDur:*MONTHS
0830 C When durFmt = '*YEARS' or
0840 C durFmt = '*Y' or durFmt = '*YEAR'
0850 C dtEnd SubDur dtStart nDur:*YEARS
0860 C When durFmt = '*WEEKS' or
0870 C durFmt = '*W' or durFmt = '*WEEK'
0880 C dtEnd SubDur dtStart nDays:*DAYS
0890 C nDays Div 7 nDur
0900 C other
0910 C eval rtncode = BADDURFMT
0920 C endSL
0930 C MOVE *ON *INLR
0940 C return
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.