× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Does anyone have samples of their date service programs
to share???
(show me your's - I'll show mine...)



H NOMAIN
 *
FFSCL03    IF   E           K DISK    usropn
 *  Global defined fields
D date_iso        S               D   datfmt(*ISO)
D date_iso2       S               D   datfmt(*ISO)
D CCU#            S              6  0 inz(0)
D CCYYMMDD        S              8  0 inz(0)
D #of_days        S              5  0
 *----------------------------------------------------------------------
 * Prototypes for Service Program DATE SERV
D/Copy qrpglesrc,#date_prot
 *----------------------------------------------------------------------
 *----------------------------------------------------------------------
Pgetnewday        B                   Export
D getnewday       pi             8  0
D   indate                       8  0 const
D   numdays                      5  0 const
D   newday        s              8  0
 * test the date comming in to see that it is valid
C     *ISO          TEST (DE)               indate
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
 * move the input date to a date data type field
C     *ISO          MOVE      indate        date_iso
 * add the input parmeter to that date
C     date_iso      ADDDUR    numdays:*D    date_iso2
 * move the result to a 8 position numeric field
C     *ISO          MOVE      date_iso2     newday
C                   RETURN    newday
C                   ENDIF
Pgetnewday        E
 *--------------------------------------------------------------------
 *--------------------------------------------------------------------
Pgetdaydif        B                   Export
D getdaydif       pi             5  0
D   indate                       8  0 const
D   indate2                      8  0 const
C     *ISO          TEST (DE)               indate
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
C     *ISO          TEST (DE)               indate2
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
 * move the input date to a date data type field
C     *ISO          MOVE      indate        date_iso
C     *ISO          MOVE      indate2       date_iso2
 * Subtract the two dates to find the difference
C     date_iso      SUBDUR    date_iso2     #of_days:*D
C                   RETURN                  #of_days
 *
C                   ENDIF
C                   ENDIF
Pgetdaydif        E
 *--------------------------------------------------------------------
 *--------------------------------------------------------------------
PgetnewdayK       B                   Export
D getnewdayK      pi             8  0
D   indate                       8  0 const
D   numdays                      5  0 const
D   newday        s              8  0
D ccyymmdd_o      S              8  0
D date_numbr      S              8  0
D wrkdays         S              5  0
D incrmt_val      S              5  0
 * test the date comming in to see that it is valid
C     FSCKEY        KLIST
C                   KFLD                    CCU#
C                   KFLD                    CCYYMMDD
C     *ISO          TEST (DE)               indate
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
 * Determine wether we are adding or subtracting days from input date
C                   EVAL      wrkdays = numdays
C     wrkdays       IFGT      0
C                   Z-ADD     1             incrmt_val
C                   ELSE
C                   Z-SUB     1             incrmt_val
C                   EVAL      wrkdays = wrkdays * -1
C                   ENDIF
 *
C     *iso          MOVE      indate        date_iso2
 *
C                   open      fscl03
 *
C                   DO        wrkdays
C     date_iso2     ADDDUR    incrmt_val:*D date_iso2
C     *ISO          MOVE      date_iso2     date_numbr
C                   MOVE      date_numbr    CCYYMMDD
C                   DOU       *IN99
C     FSCKEY        CHAIN     FSCL03                             99
C     *in99         ifeq      *off
C     date_iso2     ADDDUR    incrmt_val:*D date_iso2
C     *ISO          MOVE      date_iso2     date_numbr
C                   MOVE      date_numbr    CCYYMMDD
C                   ENDIF
C                   ENDDO
 *
C                   ENDDO
C                   close     fscl03
C     *ISO          MOVE      date_iso2     ccyymmdd_o
C                   RETURN                  ccyymmdd_o
 *
C                   ENDIF
PgetnewdayK       E
 *--------------------------------------------------------------------
 *--------------------------------------------------------------------
PgetnewdayK2      B                   Export
D getnewdayK2     pi             8  0
D   indate                       8  0 const
D   numdays                      5  0 const
D   newday        s              8  0
D ccyymmdd_o      S              8  0
D date_numbr      S              8  0
D wrkdays         S              5  0
D incrmt_val      S              5  0
 * test the date comming in to see that it is valid
C     FSCKEY        KLIST
C                   KFLD                    CCU#
C                   KFLD                    CCYYMMDD
C     *ISO          TEST (DE)               indate
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
 * Determine wether we are adding or subtracting days from input date
C                   EVAL      wrkdays = numdays
C     wrkdays       IFGT      0
C                   Z-ADD     1             incrmt_val
C                   ELSE
C                   Z-SUB     1             incrmt_val
C                   EVAL      wrkdays = wrkdays * -1
C                   ENDIF
 *
C     *iso          MOVE      indate        date_iso2
 *
C                   open      fscl03
 *
C                   DO        wrkdays
C     date_iso2     ADDDUR    incrmt_val:*D date_iso2
C     *ISO          MOVE      date_iso2     date_numbr
C                   MOVE      date_numbr    CCYYMMDD
C                   DOU       *IN99
C     FSCKEY        CHAIN     FSCL03                             99
C     *in99         ifeq      *off
C     date_iso2     ADDDUR    incrmt_val:*D date_iso2
C     *ISO          MOVE      date_iso2     date_numbr
C                   MOVE      date_numbr    CCYYMMDD
C                   ENDIF
C                   ENDDO
 *
C                   ENDDO
C                   close     fscl03
C     *ISO          MOVE      date_iso2     ccyymmdd_o
C                   RETURN                  ccyymmdd_o
 *
C                   ENDIF
PgetnewdayK2      E
 *--------------------------------------------------------------------
 *--------------------------------------------------------------------
PgetDayOWeek      B                   Export
D getdayoweek     pi             3a
D   indate                       8  0 const
D KnownDate       C                   D'1899-12-31'
D NameData        DS
D                               21a   inz('MONTUEWEDTHUFRISATSUN')
D DayName                        3a   dim(7) Overlay(NameData)
D WorkNum         S              7  0
D WorkDay         S              1  0
D DayNameOut      S              3a
 *
C     *ISO          TEST (DE)               indate
C                   IF        %ERROR
C                   RETURN                  *BLANKS
C                   ELSE
C     *ISO          MOVE      indate        Date_iso
C     Date_iso      SUBDUR    KnownDate     WorkNum:*D
C                   DIV       7             WorkNum
C                   MVR                     WorkDay
C                   EVAL      DayNameOut = DayName(WorkDay)
C                   Return                  DayNameOut
C                   ENDIF
PgetDayOWeek      E
 *--------------------------------------------------------------------
 *--------------------------------------------------------------------
PgetdaydifK       B                   Export
D getdaydifK      pi             5  0
D   indate                       8  0 const
D   indate2                      8  0 const
D #of_daysn       S              5  0
D #of_Work_days   S              5  0
D date_flip       S              5  0
D low_date        S               D
D high_date       S               D
D date_numbr      S              8  0
 *  This program will calculate the diference in work days
 *   between the starting and ending date.
C     FSCKEY        KLIST
C                   KFLD                    CCU#
C                   KFLD                    CCYYMMDD
 *
C     *ISO          TEST (DE)               indate
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
C     *ISO          TEST (DE)               indate2
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
 * move the input date to a date data type field
C     *ISO          MOVE      indate        date_iso
C     *ISO          MOVE      indate2       date_iso2
C                   ENDIF
C                   ENDIF

 * put the lower date into low_date.  put the higher date into high_da
C     date_iso      IFLT      date_iso2
C                   EVAL      low_date=date_iso
C                   EVAL      high_date=date_iso2
C                   EVAL      date_flip=-1
C                   ELSE
C                   EVAL      low_date=date_iso2
C                   EVAL      high_date=date_iso
C                   EVAL      date_flip=1
C                   ENDIF
C                   Open      FSCL03
 *
C     low_date      DOUGE     high_date
C     low_date      ADDDUR    1:*D          low_date
C     *ISO          MOVE      low_date      date_numbr
C                   MOVE      date_numbr    CCYYMMDD
C                   MOVE      *OFF          *IN99
C                   DOU       *IN99  OR
C                             low_date > high_date
C     FSCKEY        CHAIN     FSCL03
C                   IF        not %FOUND(FSCL03)
C                   add       1             #of_work_days
C                   EVAL      *IN99 = *on
C                   ELSE
C     low_date      ADDDUR    1:*D          low_date
C     *ISO          MOVE      low_date      date_numbr
C                   MOVE      date_numbr    CCYYMMDD
C                   ENDIF
C                   ENDDO
 *
C                   ENDDO
 *
C                   CLOSE     FSCL03
C     #of_work_days MULT      date_flip     #of_work_days
C                   RETURN                  #of_work_days
PgetdaydifK       E
 *--------------------------------------------------------------------
 *--------------------------------------------------------------------
PgetdaydifK2      B                   Export
D getdaydifK2     pi             5  0
D   indate                       8  0 const
D   indate2                      8  0 const
D date_flip       S              3  0
D low_date        S               D
D high_date       S               D
D GoodDate        S              5a
 *  This program will calculate the diference in work days
 *   between the starting and ending date.
C     FSCKEY        KLIST
C                   KFLD                    CCU#
C                   KFLD                    CCYYMMDD
 *
C     *ISO          TEST (DE)               indate
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
C     *ISO          TEST (DE)               indate2
C                   IF        %ERROR
c                   RETURN                  *zero
C                   ELSE
 * move the input date to a date data type field
C     *ISO          MOVE      indate        date_iso
C     *ISO          MOVE      indate2       date_iso2
C                   ENDIF
C                   ENDIF

 * put the lower date into low_date.  put the higher date into high_da
C     date_iso      IFLT      date_iso2
C                   EVAL      low_date=date_iso
C                   EVAL      high_date=date_iso2
C                   EVAL      date_flip=-1
C                   ELSE
C                   EVAL      low_date=date_iso2
C                   EVAL      high_date=date_iso
C                   EVAL      date_flip=1
C                   ENDIF

 * Subtract the two dates to find the difference
C     high_date     SUBDUR    low_date      #of_days:*D
C                   EVAL      GoodDate = 'First'

C                   Open      FSCL03
 * now loop through the FSC file, subtracting #of_days when record is
 *      -REMEMBER, if there is a record in FSC, that denotes a NON-wor
C     low_date      doWLT     high_date
C     *ISO          MOVE      low_date      CCYYMMDD
C     FSCKEY        CHAIN     FSCL03
C                   if        %FOUND(FSCL03)
c                   if        GoodDate = 'First'
C                   eval      #of_days = #of_days + 1
C                   EVAL      GoodDate = 'NO   '
C                   ELSE
C                   if        GoodDate <> 'First'
C                   eval      #of_days = #of_days - 1
C                   EVAL      GoodDate = 'NO   '
C                   ENDIF
C                   ENDIF
C                   ELSE
C                   EVAL      GoodDate = 'Yes  '
C                   endif
C     low_date      ADDDUR    1:*D          low_date
C                   endDO
C                   if        GoodDate = 'Yes  '
C                   eval      #of_days = #of_days - 1
C                   endif

C                   close     FSCL03
C                   eval      #of_days =  #of_days  * date_flip
C                   RETURN                  #of_days
PgetdaydifK2      E
 *--------------------------------------------------------------------

G Armour (garmour400r@xxxxxxxxx) wrote:
>
> Searched the archives, but with hundreds of results to wade through...
>
> Wishing to not have to reinvent a wheel that's probably been invented several 
> times.
>  If someone has a link that solves my dilemna, I'd really appreciate it.  If 
> I end
> up having to write it myself, I'll gladly share.
>
> I am getting a text file whose records contain dates like "October 08, 2002"
> (without quotes), and need to convert these dates to an *ISO date.
>
> Sounds like a perfect addition to a service program of date procedures.
>
> Also, anybody have a quick conversion for "m/d/yyyy" dates, where the month 
> may be 1
> or 2 digits and same with the day of the month?
>
> TIA, GA
>
> __________________________________
>


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 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.