home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / nfsrc21.zip / ELAPSED.PRG < prev    next >
Text File  |  1992-09-28  |  4KB  |  133 lines

  1. /*
  2.  * File......: ELAPSED.PRG
  3.  * Author....: Jo W. French dba Practical Computing
  4.  * Date......: $Date:   28 Sep 1992 00:37:56  $
  5.  * Revision..: $Revision:   1.3  $
  6.  * Log file..: $Logfile:   C:/nanfor/src/elapsed.prv  $
  7.  * 
  8.  * The functions contained herein are the original work of Jo W. French
  9.  * and are placed in the public domain.
  10.  *
  11.  * Modification history:
  12.  * ---------------------
  13.  *
  14.  * $Log:   C:/nanfor/src/elapsed.prv  $
  15.  * 
  16.  *    Rev 1.3   28 Sep 1992 00:37:56   GLENN
  17.  * Jo French cleaned up.
  18.  * 
  19.  *    Rev 1.2   15 Aug 1991 23:05:44   GLENN
  20.  * Forest Belt proofread/edited/cleaned up doc
  21.  * 
  22.  *    Rev 1.1   14 Jun 1991 19:51:46   GLENN
  23.  * Minor edit to file header
  24.  * 
  25.  *    Rev 1.0   01 Apr 1991 01:01:18   GLENN
  26.  * Nanforum Toolkit
  27.  *
  28.  */
  29.  
  30.  
  31. #ifdef FT_TEST
  32.  
  33.   FUNCTION DEMO()
  34.   LOCAL dStart, dEnd, cTimeStart, cTimeEnd, n, aDataTest := {}
  35.   dStart := CTOD('11/28/90')
  36.   dEnd   := CTOD('11/30/90')
  37.   cTimeStart := "08:00:00"
  38.   cTimeEnd   := "12:10:30"
  39.  
  40.   aDataTest := FT_ELAPSED(dStart,dEnd,cTimeStart,cTimeEnd)
  41.   FOR n = 1 to 4
  42.     ? aDataTest[n,1], STR(aDataTest[n,2], 12, 4)
  43.     ?? " "
  44.     ?? IF(n == 1, 'Days', IF( n== 2, 'Hours', IF( n == 3, 'Mins.', 'Secs.')))
  45.   NEXT
  46.   RETURN NIL
  47.  
  48. #endif
  49.  
  50. /*  $DOC$
  51.  *  $FUNCNAME$
  52.  *     FT_ELAPSED()
  53.  *  $CATEGORY$
  54.  *     Date/Time
  55.  *  $ONELINER$
  56.  *     Return elapsed time between two days and/or times
  57.  *  $SYNTAX$
  58.  *     FT_ELAPSED([ <dStart> ], [ <dEnd> ], ;
  59.  *                <cTimeStart>, <cTimeEnd>) -> aTimedata
  60.  *  $ARGUMENTS$
  61.  *     <dStart> is any valid date in any date format. Defaults to DATE().
  62.  *
  63.  *     <dEnd> is any valid date in any date format. Defaults to DATE().
  64.  *
  65.  *     <cTimeStart> is a valid Time string of the format 'hh:mm:ss' where
  66.  *     hh is hours in 24-hour format.
  67.  *
  68.  *     <cTimeEnd> is a valid Time string of the format 'hh:mm:ss' where
  69.  *     hh is hours in 24-hour format.
  70.  *  $RETURNS$
  71.  *     A two-dimensional array containing elapsed time data.
  72.  *  $DESCRIPTION$
  73.  *     FT_ELAPSED() calculates the elapsed time between two Date/Time events.
  74.  *
  75.  *     It returns an array which contains the following data:
  76.  *
  77.  *     aRetVal[1,1]  Integer Days      aRetVal[1,2] Total Days    (nn.nnnn)
  78.  *     aRetVal[2,1]  Integer Hours     aRetVal[2,2] Total Hours   (nn.nnnn)
  79.  *     aRetVal[3,1]  Integer Minutes   aRetVal[3,2] Total Minutes (nn.nnnn)
  80.  *     aRetVal[4,1]  Integer Seconds   aRetVal[4,2] Total Seconds (nn)
  81.  *  $EXAMPLES$
  82.  *     FT_ELAPSED(CTOD('11/28/90'), CTOD('11/30/90'), '08:00:00', '12:10:30')
  83.  *     will return:
  84.  *
  85.  *     aRetVal[1,1] ->  2 (Days)        aRetVal[1,2] ->    2.1740  Days
  86.  *     aRetVal[2,1] ->  4 (Hours)       aRetVal[2,2] ->   52.1750  Hours
  87.  *     aRetVal[3,1] -> 10 (Minutes)     aRetVal[3,2] -> 3130.5000  Minutes
  88.  *     aRetVal[4,1] -> 30 (Seconds)     aRetVal[4,2] -> 187830     Seconds
  89.  *  $END$
  90.  */
  91.  
  92. FUNCTION FT_ELAPSED(dStart, dEnd, cTimeStart, cTimeEnd)
  93.   LOCAL nTotalSec, nCtr, nConstant, nTemp, aRetVal[4,2]
  94.  
  95.   IF ! ( VALTYPE(dStart) $ 'DC' )
  96.      dStart := DATE()
  97.   ELSEIF VALTYPE(dStart) == 'C'
  98.      cTimeStart := dStart
  99.      dStart     := DATE()
  100.   ENDIF
  101.  
  102.   IF ! ( VALTYPE(dEnd) $ 'DC' )
  103.      dEnd := DATE()
  104.   ELSEIF VALTYPE(dEnd) == 'C'
  105.      cTimeEnd := dEnd
  106.      dEnd     := DATE()
  107.   ENDIF
  108.  
  109.   IF( VALTYPE(cTimeStart) != 'C', cTimeStart := '00:00:00', )
  110.   IF( VALTYPE(cTimeEnd)   != 'C', cTimeEnd   := '00:00:00', )
  111.  
  112.   nTotalSec  := (dEnd - dStart) * 86400                              + ;
  113.                 VAL(cTimeEnd)   *  3600                              + ;
  114.                 VAL(SUBSTR(cTimeEnd,AT(':', cTimeEnd)+1,2)) * 60     + ;
  115.                 IF(RAT(':', cTimeEnd) == AT(':', cTimeEnd), 0,         ;
  116.                 VAL(SUBSTR(cTimeEnd,RAT(':', cTimeEnd)+1)))          - ;
  117.                 VAL(cTimeStart) * 3600                               - ;
  118.                 VAL(SUBSTR(cTimeStart,AT(':', cTimeStart)+1,2)) * 60 - ;
  119.                 IF(RAT(':', cTimeStart) == AT(':', cTimeStart), 0,     ;
  120.                 VAL(SUBSTR(cTimeStart,RAT(':', cTimeStart)+1)))
  121.  
  122.   nTemp := nTotalSec
  123.  
  124.   FOR nCtr = 1 to 4
  125.      nConstant := IF(nCtr == 1, 86400, IF(nCtr == 2, 3600, IF( nCtr == 3, 60, 1)))
  126.      aRetVal[nCtr,1] := INT(nTemp/nConstant)
  127.      aRetval[nCtr,2] := nTotalSec / nConstant
  128.      nTemp -= aRetVal[nCtr,1] * nConstant
  129.   NEXT
  130.  
  131. RETURN aRetVal
  132.  
  133.