midrange.com code scratchpad
Name:
getreldate()
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
05/15/2008 02:50:33 pm
IP:
Logged
Description:
Accepts varying inputs that might be a data or word(s) that represent a date.
There is the procedure, prototypes, exports and create command included
Code:
  1.     ‚‚*-------------------------------------------------------------------------
  2.      ‚* Get Relative Date ***********************
  3.     ‚‚*-------------------------------------------------------------------------
  4.      P getreldate      B                   EXPORT
  5.      D getreldate      pi
  6.      D  inpreldate                   15
  7.      D  inpformat                     5    CONST OPTIONS(*NOPASS)
  8.      D  inpref                       10    CONST OPTIONS(*NOPASS)
  9.      D  outvalid                      1N   OPTIONS(*NOPASS)
  10.      ‚*
  11.      D ISO_DATE        S               D   DATFMT(*ISO)
  12.      D SYS_DATE        S               D   DATFMT(*ISO)
  13.      D CALC_DATE       S               D   DATFMT(*ISO)
  14.      D WK_DATE         S             10    VARYING
  15.      D WK_DATE2        S             10
  16.      D WK_YEAR         S              4
  17.      D WK_YEAR#        S              4  0
  18.      D LEN             S              4  0
  19.      D RECHECK         S               N
  20.      D SHORTDATE       S               N
  21.      D POSA            S              2  0
  22.      D POSB            S              2  0
  23.      D VALID           S              1    INZ('N')
  24.      D TODAY           S               D   INZ(*JOB)
  25.      D WKNUM           S              7S 0
  26.      D WKDAY           S              1S 0
  27.      D CURRMTH         S              6S 0
  28.      D TEST_M1         S              6S 0
  29.      D TEST_M2         S              6S 0
  30.      D M1              S              1  0
  31.      D M2              S              2  0
  32.      D D               S             10I 0
  33.     ‚‚*========================================================================*
  34.      C                   IF        NOT %OPEN(DATRELPF)
  35.      C                   OPEN      DATRELPF
  36.      C                   ENDIF
  37.      ‚*
  38.      C                   TIME                    SYS_DATE
  39.      C                   EVAL      WK_DATE = %TRIM(inpreldate)
  40.     ‚‚*  Check to see if user keyed "MAXDATE"
  41.      C                   IF        WK_DATE = 'MAXDATE' OR
  42.      C                             WK_DATE = 'MAX' OR
  43.      C                             WK_DATE = 'M'
  44.      C                   EVAL      WK_DATE = '12/31/9999     '
  45.      C                   EVAL      inpreldate = '12/31/9999     '
  46.      C                   ENDIF
  47.      ‚*
  48.      C                   EXSR      REL_DATE
  49.     ‚‚*  Check if actually a date
  50.      C                   IF        VALID = 'N'
  51.      C                   EXSR      TEST_DATE
  52.      C                   ENDIF
  53.      ‚*
  54.      C                   IF        VALID = 'Y'
  55.      C                   IF        %PARMS > 1
  56.      C                   SELECT
  57.     ‚‚*
  58.      C                   WHEN      inpformat = '*ISO  '
  59.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*ISO)
  60.      ‚*
  61.      C                   WHEN      inpformat = '*ISO0 '
  62.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*ISO0)
  63.      ‚*
  64.      C                   WHEN      inpformat = '*USA  '
  65.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*USA)
  66.      ‚*
  67.      C                   WHEN      inpformat = '*USA0 '
  68.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*USA0)
  69.      ‚*
  70.      C                   WHEN      inpformat = '*MDY  '
  71.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*MDY)
  72.      ‚*
  73.      C                   WHEN      inpformat = '*MDY0 '
  74.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*MDY0)
  75.      ‚*
  76.      C                   WHEN      inpformat = '*YMD  '
  77.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*YMD)
  78.      ‚*
  79.      C                   WHEN      inpformat = '*YMD0 '
  80.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*YMD0)
  81.      C                   OTHER
  82.     ‚‚*  Date is converted to USA format
  83.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*USA)
  84.      C                   ENDSL
  85.      C                   ELSE
  86.      C                   EVAL      inpreldate  = %CHAR(ISO_DATE:*USA)
  87.      C                   ENDIF
  88.      ‚*
  89.      C                   ENDIF
  90.       *
  91.      C                   IF        %PARMS = 4
  92.      C                   EVAL      outvalid = VALID = 'Y'
  93.      C                   ENDIF
  94.     ‚‚*
  95.      C                   IF        %OPEN(DATRELPF)
  96.      C                   CLOSE     DATRELPF
  97.      C                   ENDIF
  98.     ‚‚*========================================================================*
  99.     ‚‚* Test Date
  100.     ‚‚*========================================================================*
  101.      C     TEST_DATE     BEGSR
  102.      ‚*
  103.      C     CHKAGAIN      TAG
  104.      C                   EVAL      LEN = %LEN(WK_DATE)
  105.      C                   EVAL      WK_DATE2 = WK_DATE
  106.     ‚‚* 10 character dates
  107.      C     *USA          TEST(DE)                WK_DATE2
  108.      C                   IF        NOT %ERROR
  109.      C                   EVAL      ISO_DATE = %DATE(WK_DATE2:*USA)
  110.      C                   EVAL      VALID = 'Y'
  111.      C                   GOTO      EXIT
  112.      C                   ENDIF
  113.      ‚*
  114.      C     *ISO          TEST(DE)                WK_DATE2
  115.      C                   IF        NOT %ERROR
  116.      C     *ISO          MOVEL     WK_DATE2      ISO_DATE
  117.      C                   EVAL      VALID = 'Y'
  118.      C                   GOTO      EXIT
  119.      C                   ENDIF
  120.      ‚*
  121.      C                   IF        LEN > 8
  122.      C                   GOTO      CHKSHRDATE
  123.      C                   ENDIF
  124.     ‚‚* 8 character dates or 8 digit date numbers
  125.      C     *USA0         TEST(DE)                WK_DATE2
  126.      C                   IF        NOT %ERROR
  127.      C     *USA0         MOVEL     WK_DATE2      ISO_DATE
  128.      C                   EVAL      VALID = 'Y'
  129.      C                   GOTO      EXIT
  130.      C                   ENDIF
  131.      ‚*
  132.      C     *ISO0         TEST(DE)                WK_DATE2
  133.      C                   IF        NOT %ERROR
  134.      C     *ISO0         MOVEL     WK_DATE2      ISO_DATE
  135.      C                   EVAL      VALID = 'Y'
  136.      C                   GOTO      EXIT
  137.      C                   ENDIF
  138.      ‚*
  139.      C     *MDY/         TEST(DE)                WK_DATE2
  140.      C                   IF        NOT %ERROR
  141.      C     *MDY/         MOVEL     WK_DATE2      ISO_DATE
  142.      C                   EVAL      VALID = 'Y'
  143.      C                   GOTO      EXIT
  144.      C                   ENDIF
  145.     ‚‚*
  146.      C     *MDY-         TEST(DE)                WK_DATE2
  147.      C                   IF        NOT %ERROR
  148.      C     *MDY-         MOVEL     WK_DATE2      ISO_DATE
  149.      C                   EVAL      VALID = 'Y'
  150.      C                   GOTO      EXIT
  151.      C                   ENDIF
  152.      ‚*
  153.      C     *MDY.         TEST(DE)                WK_DATE2
  154.      C                   IF        NOT %ERROR
  155.      C     *MDY.         MOVEL     WK_DATE2      ISO_DATE
  156.      C                   EVAL      VALID = 'Y'
  157.      C                   GOTO      EXIT
  158.      C                   ENDIF
  159.     ‚‚*
  160.      C     *MDY,         TEST(DE)                WK_DATE2
  161.      C                   IF        NOT %ERROR
  162.      C     *MDY,         MOVEL     WK_DATE2      ISO_DATE
  163.      C                   EVAL      VALID = 'Y'
  164.      C                   GOTO      EXIT
  165.      C                   ENDIF
  166.      ‚*
  167.      C     *MDY&         TEST(DE)                WK_DATE2
  168.      C                   IF        NOT %ERROR
  169.      C     *MDY&         MOVEL     WK_DATE2      ISO_DATE
  170.      C                   EVAL      VALID = 'Y'
  171.      C                   GOTO      EXIT
  172.      C                   ENDIF
  173.     ‚‚*
  174.      C     *YMD/         TEST(DE)                WK_DATE2
  175.      C                   IF        NOT %ERROR
  176.      C     *YMD/         MOVEL     WK_DATE2      ISO_DATE
  177.      C                   EVAL      VALID = 'Y'
  178.      C                   GOTO      EXIT
  179.      C                   ENDIF
  180.      ‚*
  181.      C     *YMD-         TEST(DE)                WK_DATE2
  182.      C                   IF        NOT %ERROR
  183.      C     *YMD-         MOVEL     WK_DATE2      ISO_DATE
  184.      C                   EVAL      VALID = 'Y'
  185.      C                   GOTO      EXIT
  186.      C                   ENDIF
  187.     ‚‚*
  188.      C     *YMD.         TEST(DE)                WK_DATE2
  189.      C                   IF        NOT %ERROR
  190.      C     *YMD.         MOVEL     WK_DATE2      ISO_DATE
  191.      C                   EVAL      VALID = 'Y'
  192.      C                   GOTO      EXIT
  193.      C                   ENDIF
  194.      ‚*
  195.      C     *YMD,         TEST(DE)                WK_DATE2
  196.      C                   IF        NOT %ERROR
  197.      C     *YMD,         MOVEL     WK_DATE2      ISO_DATE
  198.      C                   EVAL      VALID = 'Y'
  199.      C                   GOTO      EXIT
  200.      C                   ENDIF
  201.     ‚‚*
  202.      C     *YMD&         TEST(DE)                WK_DATE2
  203.      C                   IF        NOT %ERROR
  204.      C     *YMD&         MOVEL     WK_DATE2      ISO_DATE
  205.      C                   EVAL      VALID = 'Y'
  206.      C                   GOTO      EXIT
  207.      C                   ENDIF
  208.      ‚*
  209.      C                   IF        LEN > 6
  210.      C                   GOTO      CHKSHRDATE
  211.      C                   ENDIF
  212.     ‚‚* 6 digit date numbers
  213.      C     *MDY0         TEST(DE)                WK_DATE2
  214.      C                   IF        NOT %ERROR
  215.      C     *MDY0         MOVEL     WK_DATE2      ISO_DATE
  216.      C                   EVAL      VALID = 'Y'
  217.      C                   GOTO      EXIT
  218.      C                   ENDIF
  219.      ‚*
  220.      C     *YMD0         TEST(DE)                WK_DATE2
  221.      C                   IF        NOT %ERROR
  222.      C     *YMD0         MOVEL     WK_DATE2      ISO_DATE
  223.      C                   EVAL      VALID = 'Y'
  224.      C                   GOTO      EXIT
  225.      C                   ENDIF
  226.      ‚*
  227.      C     CHKSHRDATE    TAG
  228.      ‚*  Check for abbreviated dates
  229.      C                   IF        SHORTDATE = *OFF
  230.      C                   EVAL      SHORTDATE = *ON
  231.      C                   EVAL      RECHECK = *OFF
  232.      C                   EVAL      WK_YEAR = %editc(*YEAR:'X')
  233.      C                   EVAL      POSA = %SCAN('/':WK_DATE)
  234.      C                   EVAL      POSB = %SCAN('/':WK_DATE:POSA+1)
  235.      C                   IF        POSA > 0
  236.      ‚*  If date has month & day only
  237.      C                   IF        POSB = 0
  238.      C                   SELECT
  239.      ‚*
  240.      C                   WHEN      LEN = 5 AND POSA = 3
  241.      C                   EVAL      WK_DATE = WK_DATE +'/'+WK_YEAR
  242.      C                   EVAL      RECHECK = *ON
  243.      ‚*
  244.      C                   WHEN      LEN = 4 AND POSA = 2
  245.      C                   EVAL      WK_DATE = '0'+WK_DATE +'/'+WK_YEAR
  246.      C                   EVAL      RECHECK = *ON
  247.      ‚*
  248.      C                   WHEN      LEN = 4 AND POSA = 3
  249.      C                   EVAL      WK_DATE = %SUBST(WK_DATE:1:3)
  250.      C                             +'0'+%SUBST(WK_DATE:4:1) +'/'+WK_YEAR
  251.      C                   EVAL      RECHECK = *ON
  252.      ‚*
  253.      C                   WHEN      LEN = 3 AND POSA = 2
  254.      C                   EVAL      WK_DATE = '0'+%SUBST(WK_DATE:1:2)
  255.      C                             +'0'+%SUBST(WK_DATE:3:1) +'/'+WK_YEAR
  256.      C                   EVAL      RECHECK = *ON
  257.      C                   ENDSL
  258.      C                   ELSE
  259.      C                   SELECT
  260.      ‚*
  261.      C                   WHEN      LEN = 9 AND POSA = 2
  262.      C                   EVAL      WK_DATE = '0' +WK_DATE
  263.      C                   EVAL      RECHECK = *ON
  264.      ‚*
  265.      C                   WHEN      LEN = 9 AND POSA = 3
  266.      C                   EVAL      WK_DATE = %SUBST(WK_DATE:1:3)
  267.      C                             +'0'+%SUBST(WK_DATE:4:6)
  268.      C                   EVAL      RECHECK = *ON
  269.      ‚*
  270.      C                   WHEN      LEN = 7 AND POSA = 2
  271.      C                   EVAL      WK_DATE = '0' +WK_DATE
  272.      C                   EVAL      RECHECK = *ON
  273.      ‚*
  274.      C                   WHEN      LEN = 7 AND POSA = 3
  275.      C                   EVAL      WK_DATE = %SUBST(WK_DATE:1:3)
  276.      C                             +'0'+%SUBST(WK_DATE:4:4)
  277.      C                   EVAL      RECHECK = *ON
  278.      ‚*
  279.      C                   WHEN      LEN = 6 AND POSA = 2
  280.      C                   EVAL      WK_DATE ='0'+%SUBST(WK_DATE:1:2)
  281.      C                                     +'0'+%SUBST(WK_DATE:3:4)
  282.      C                   EVAL      RECHECK = *ON
  283.      ‚*
  284.      C                   ENDSL
  285.      C                   ENDIF
  286.      ‚*
  287.      C                   IF        RECHECK = *ON
  288.      C                   GOTO      CHKAGAIN
  289.      C                   ENDIF
  290.      ‚*
  291.      C                   ELSE
  292.      ‚*
  293.      C                   TESTN                   WK_DATE              707070
  294.      C  N70              LEAVESR
  295.      ‚*
  296.      C                   SELECT
  297.      ‚*  Only need leading zero so dont adjust the year.
  298.      C                   WHEN      LEN = 7
  299.      C                             OR LEN = 5
  300.      C                   EVAL      WK_DATE = '0' +WK_DATE
  301.      C                   EVAL      RECHECK = *ON
  302.      C                   EVAL      SHORTDATE = *OFF
  303.      ‚*
  304.      C                   WHEN      LEN = 4
  305.      C                   EVAL      WK_DATE = WK_DATE +WK_YEAR
  306.      C                   EVAL      RECHECK = *ON
  307.      ‚*
  308.      C                   WHEN      LEN = 3
  309.      C                   EVAL      WK_YEAR# = %SUBDT(TODAY:*Y)
  310.      C                   EVAL      M2 = %SUBDT(TODAY:*M)
  311.      C                   Z-ADD     M2            CURRMTH
  312.      C                   MOVEL     WK_YEAR#      CURRMTH
  313.      C                   MOVEL     WK_DATE       M1
  314.      C                   Z-ADD     M1            TEST_M1
  315.      C                   MOVEL     *YEAR         TEST_M1
  316.      C                   MOVEL     WK_DATE       M2
  317.      C                   Z-ADD     M2            TEST_M2
  318.      C                   MOVEL     *YEAR         TEST_M2
  319.      ‚* Month 2 to 9
  320.      C                   IF        TEST_M1 = CURRMTH
  321.      C                   EVAL      WK_DATE = '0' +WK_DATE +WK_YEAR
  322.      ‚* Month 10 to 12
  323.      C                   ELSEIF    TEST_M2 = CURRMTH
  324.      C                   EVAL      WK_DATE = %SUBST(WK_DATE:1:2) +'0'
  325.      C                                      +%SUBST(WK_DATE:3:1) +WK_YEAR
  326.      ‚* Month 1 to 9 prior to current
  327.      C                   ELSEIF    M1 >= 1 OR M1 <= 9
  328.      C                   EVAL      WK_DATE2 = '0' +WK_DATE +WK_YEAR
  329.      C     *USA0         TEST(DE)                WK_DATE2
  330.      C                   IF        %ERROR
  331.      C                   EVAL      VALID = 'N'
  332.      C                   LEAVESR
  333.      C                   ENDIF
  334.      C                   EVAL      ISO_DATE = %DATE(WK_DATE2:*USA0)
  335.      C                   EVAL      D = %DIFF(TODAY:ISO_DATE:*D)
  336.      ‚* Only JAN has the condition where it might also be
  337.      ‚*   OCT, NOV or DEC.
  338.      C                   IF        M1 = 1 AND D > 60
  339.      C                             AND NOT (WK_DATE = '120' OR WK_DAte = '110')
  340.      C                   GOTO      TESTM2DATE
  341.      C                   ENDIF
  342.      C                   EVAL      WK_DATE = %TRIM(WK_DATE2)
  343.      ‚* Month 10 to 12 prior to current
  344.      C                   ELSEIF    M2 >= 10 OR M2 <= 12
  345.      C     TESTM2DATE    TAG
  346.      C                   EVAL      WK_DATE2 = %SUBST(WK_DATE:1:2) +'0'
  347.      C                                      +%SUBST(WK_DATE:3:1) +WK_YEAR
  348.      C     *USA0         TEST(DE)                WK_DATE2
  349.      C                   IF        %ERROR
  350.      C                   EVAL      VALID = 'N'
  351.      C                   LEAVESR
  352.      C                   ENDIF
  353.      C                   EVAL      WK_DATE = %TRIM(WK_DATE2)
  354.      C                   EVAL      ISO_DATE = %DATE(WK_DATE2:*USA0)
  355.      C                   EVAL      D = %DIFF(TODAY:ISO_DATE:*D)
  356.      ‚*
  357.      C                   IF        D > 60
  358.      C                   EVAL      WK_DATE = '0' +WK_DATE +WK_YEAR
  359.      C                   ENDIF
  360.      ‚*
  361.      C                   ENDIF
  362.      C                   EVAL      RECHECK = *ON
  363.      C                   OTHER
  364.      ‚*
  365.      C                   ENDSL
  366.      ‚*
  367.      C                   IF        RECHECK = *ON
  368.      C                   GOTO      CHKAGAIN
  369.      C                   ENDIF
  370.      ‚*
  371.      C     EXIT          TAG
  372.      C                   IF        SHORTDATE = *ON AND ISO_DATE < TODAY
  373.      C                   EVAL      D = %DIFF(TODAY:ISO_DATE:*D)
  374.      C                   IF        D > 60
  375.      C                   EVAL      ISO_DATE = ISO_DATE +%YEARS(1)
  376.      C                   ENDIF
  377.      C                   ENDIF
  378.      C                   EVAL      SHORTDATE = *OFF
  379.      C                   ENDIF
  380.      C                   ENDIF
  381.      ‚*
  382.      C                   ENDSR
  383.     ‚‚*
  384.      ‚*========================================================================*
  385.      ‚* Relative Date
  386.      ‚*========================================================================*
  387.      C     REL_DATE      BEGSR
  388.      ‚*
  389.      C                   EVAL      inpreldate  = %TRIML(inpreldate )
  390.      ‚*
  391.      C     inpreldate    CHAIN     DATRELPF
  392.      C                   IF        %FOUND(DATRELPF)
  393.      C                   EVAL      CALC_DATE = TODAY
  394.      ‚*
  395.      C                   IF        DRWEEK = 'D'
  396.      C                   MONITOR
  397.      C                   EVAL      CALC_DATE = CALC_DATE + %DAYS(DRDOW)
  398.      C                   ON-ERROR  00113
  399.      C                   EVAL      VALID = 'N'
  400.      C                   CLEAR                   WK_DATE
  401.      C                   LEAVESR
  402.      C                   ENDMON
  403.      C                   GOTO      EXITRD
  404.      C                   ENDIF
  405.      ‚*
  406.      C                   IF        DRWEEK = 'S'
  407.      C                   IF        %PARMS >= 3
  408.      C                   EVAL      WK_DATE = %TRIML(inpref      )
  409.      C                   EXSR      TEST_DATE
  410.      C                   IF        VALID = 'Y'
  411.      C                   EVAL      CALC_DATE = ISO_DATE
  412.      C                   ENDIF
  413.      C                   ENDIF
  414.      C                   MONITOR
  415.      C                   EVAL      CALC_DATE = CALC_DATE + %DAYS(DRDOW)
  416.      C                   ON-ERROR  00113
  417.      C                   EVAL      VALID = 'N'
  418.      C                   CLEAR                   WK_DATE
  419.      C                   LEAVESR
  420.      C                   ENDMON
  421.      C                   GOTO      EXITRD
  422.      C                   ENDIF
  423.      ‚*
  424.      C     CALC_DATE     SUBDUR    BASEDATE      WKNUM:*D
  425.      C     WKNUM         DIV       7             WKNUM
  426.      C                   MVR                     WKDAY
  427.      C                   ADD       1             WKDAY
  428.      ‚*
  429.      C                   EVAL      CALC_DATE = CALC_DATE - %DAYS(WKDAY)
  430.      ‚*
  431.      C                   SELECT
  432.      C                   WHEN      DRWEEK = 'L'
  433.      C                   EVAL      CALC_DATE = CALC_DATE - %DAYS(7)
  434.      ‚*
  435.      C                   WHEN      DRWEEK = 'N'
  436.      C                   EVAL      CALC_DATE = CALC_DATE + %DAYS(7)
  437.      ‚*
  438.      C                   OTHER
  439.      C                   MOVE      CALC_DATE     CALC_DATE
  440.      ‚*
  441.      C                   ENDSL
  442.      ‚*
  443.      C                   EVAL      CALC_DATE = CALC_DATE + %DAYS(DRDOW)
  444.      ‚*
  445.      C     EXITRD        TAG
  446.      C                   MOVE      CALC_DATE     ISO_DATE
  447.      C                   EVAL      VALID = 'Y'
  448.      ‚*
  449.      C                   ENDIF
  450.      ‚*
  451.      C                   ENDSR
  452.     ‚‚*==================
  453.      C     *PSSR         BegSr
  454.  
  455.      C                   If        pgmisinerror()
  456.      C                   IF        %OPEN(DATRELPF)
  457.      C                   CLOSE     DATRELPF
  458.      C                   ENDIF
  459.      C                   Return
  460.      C                   EndIf
  461.  
  462.      C                   EndSr
  463.     ‚‚*==================
  464.      ‚*
  465.      P                 E
  466.      ‚*
  467.     ‚ *-------------------------------------------------------------------------
  468.       * Check for a progam error
  469.     ‚ *-------------------------------------------------------------------------
  470.      P pgmisinerror    b
  471.      D pgmisinerror    pi             1N
  472.  
  473.  
  474.      C                   Select
  475.      ‚* Invalid Date, Time or Timestamp value, Date overflow or Date mapping errors
  476.      C                   When      %STATUS >= 00112 and %STATUS <= 00114
  477.      C                   Exsr      SNDMSG
  478.      C                   Return    *ON
  479.      ‚* Called pgm or procedure failed, Error calling pgm or procedure, Pointer or parameter error
  480.      C                   When      %STATUS >= 00202 and %STATUS <= 00222
  481.      C                   Exsr      SNDMSG
  482.      C                   Return    *ON
  483.      C                   EndSL
  484.  
  485.      C                   Return    *OFF
  486.  
  487.       * Send Error Message
  488.      C     SNDMSG        BegSr
  489.  
  490.      C                   Eval      MSGTOOLS.ID = 'ERR9999'
  491.      C                   Eval      MSGTOOLS.DATA = StatusMsg
  492.      C****Your message send tool goes here
  493.      C                   EndSr
  494.  
  495.      P                 E
  496.  
  497.  
  498.       *--------------------------------------------------
  499.       * Procedure name: getreldate
  500.       * Purpose:        Returns a true date replacing the psuedo
  501.       *                 date that may have been passed.  A psuedo
  502.       *                 date can be like +1d, NEXT WED, etc.  See
  503.       *                 date in DATRELPF for all possible relative
  504.       *                 date values.
  505.       *                 You can also pass in a shortened date like
  506.       *                 0504 and get back as date like 05/04/2006.
  507.       * Parameter:      A real date, psuedo date or short date.
  508.       * Parameter:      The format of the returned date value.
  509.       * Parameter:      For incremental psuedo date (+2D) a date
  510.       *                 string that is used to increment starting from.
  511.       *                 If not passed, TODAY is assumed.
  512.       * Parameter:      Logical condition siginfying a valid date,
  513.       *                 psuedo or short date was passed in.
  514.       *--------------------------------------------------
  515.      D getreldate      PR
  516.      D  inpreldate                   15
  517.      D  inpformat                     5    CONST OPTIONS(*NOPASS)
  518.      D  inpref                       10    CONST OPTIONS(*NOPASS)
  519.      D  outvalid                      1N   OPTIONS(*NOPASS)
  520.  
  521.      D pgmisinerror    pr             1N
  522.  
  523.  
  524.  
  525.                                                  
  526. STRPGMEXP  PGMLVL(*CURRENT) SIGNATURE('V1R1M0')  
  527.      EXPORT SYMBOL(getreldate) 
  528. ENDPGMEXP
  529.  
  530. CRTSRVPGM  SRVPGM(WFIOBJ/DATEUTL) ACTGRP(DATEUTL) OPTION(*DUPPROC) 
  531.  
© 2004-2019 by midrange.com generated in 0.009s valid xhtml & css