Page 1 of 1

EtapTime me da un resultado no esperado.

Posted: Tue Jun 24, 2014 12:11 pm
by goosfancito

Code: Select all

CHORA1= "8:59" 
CHORA2 = "14:30" 
------------------------------------------------------------------------------* 
ElapTime(cHora1, cHora2) => "06:21:00" 
 
Y debería de ser 5:21

Solucion?

Re: EtapTime me da un resultado no esperado.

Posted: Tue Jun 24, 2014 12:46 pm
by karinha

Re: EtapTime me da un resultado no esperado.

Posted: Tue Jun 24, 2014 12:57 pm
by goosfancito
bueno...
a construir otra funcioncita...

gracias Karina

Re: EtapTime me da un resultado no esperado.

Posted: Tue Jun 24, 2014 11:59 pm
by Willi Quintana
Hola Goosfancito....
Prueba con esto....

Code: Select all

//----------------------------------------------------------------------------------------------------
Function QTiempo(cTime1, cTime2)
local nSec1, nSec2, nSec3, nHora, nMinu

IF EMPTY(cTime1) .OR. EMPTY(cTime2) .OR. VAL(SUBSTR(cTime2,1,2)) * 3600 + VAL(SUBSTR(cTime2,4,2)) * 60 + VAL(SUBSTR(cTime2,7,2)) = 0  
 Return("")
EndIf

If VAL(SUBSTR(cTime1,1,2)) > VAL(SUBSTR(cTime2,1,2))
  cTime2 := STRZERO( VAL(SUBSTR(cTime2,1,2)) + 24,2 ) + SUBSTR(cTime2,3,6)
EndIf

nSec1 := VAL(SUBSTR(cTime1,1,2)) * 3600 + VAL(SUBSTR(cTime1,4,2)) * 60 + VAL(SUBSTR(cTime1,7,2))
nSec2 := VAL(SUBSTR(cTime2,1,2)) * 3600 + VAL(SUBSTR(cTime2,4,2)) * 60 + VAL(SUBSTR(cTime2,7,2))
nSec3 := nSec2 - nSec1

nHora := nSec3 / 3600
nSec3 := nSec3 - INT(nHora) * 3600
nMinu := nSec3 / 60
nSec3 := nSec3 - INT(nMinu) * 60

Return(STRZERO(nHora,2) + ":" + STRZERO(nMinu,2) + ":" + STRZERO(nSec3,2))

 

Re: EtapTime me da un resultado no esperado.

Posted: Wed Jun 25, 2014 6:00 am
by Manuel Valdenebro
Según dice el manual sobre Elaptime, sus dos parámetros son 'Time() formatted character string'. La función ELAPTIME funciona perfectamente, siempre que los parámetros sean correctos. En este caso, como los parámetros no son correctos, lo que hay que arreglar son los parámetros y no hacer una nueva función. Si queremos una aplicación eficiente y rápida, una de las reglas sería usar las funciones del propio lenguaje y no reinventar la rueda.

Como el problema se genera por la necesidad de poner variables-horas con un sólo carácter, la solución podría ser la siguiente:

elaptime ( fValiHora(cHora1), fValiHora(cHora2) )

FUNCTION fValiHora (cTime)

IF AT(':', cTime)=2
cTime:= '0' + cTime
ENDIF

RETURN cTime


Otra cosa es, como en otro hilo dijo Biel, cuando tratamos fechas y hora. Para eso si es necesario un nueva función.

Re: EtapTime me da un resultado no esperado.

Posted: Wed Jun 25, 2014 10:34 am
by goosfancito
Gracias a todos.
Ya me genere una funcion y me soluciona lo que necesito,
con respecto a lo que me decis Manuel, pienso que si la función entonces habría que hacerla un poco mas flexible o por lo menos que
los pasos que me decis lo haga la propia función. Estaría bueno.

Gracias.