Cálculos de Tiempo

Saludos, soy Nuevo en este modo de programación y ya encontré un pequeño inconveniente (CREO), el caso es necesito calcular la duraci´`on de 2 tiempos, consumo y restante de la duración, en la Universidad nos están pidiendo realizar un Simulador de Conexión Limitada por lo que debo manejar para la Conexión:
Fecha Inicio : DATE()
Fecha Final : DATE()
Hora Inicio : Char(10)
Hora Final : Char(10)
Duración : Char(10)
Consumido : Char(10)
Restante : Char(10)
Agradezco si alguien me puede ayudar que es de extremada urgencia... Muchas Gracias Anticipadamente.
FG

1 Respuesta

Respuesta
1
Rutina para calcular la diferencia entre dos variables DATETIME() y retornar una cadena en DÍAS, HORAS, MINUTOS y SEGUNDOS.
*-----------------------------
* FUNCTION Dif_DHMS(ttIni,ttFin)
*-----------------------------
* Calcula la diferencia de dos variables
* DATETIME y retorna en formato
* ### Días, ## Horas, ## Minutos, ## Segundos
*-----------------------------
FUNCTION Dif_DHMS(ttIni,ttFin)
LOCAL ln, lnDia, lnHor, lnMin, lnSeg
IF EMPTY(ttFin)
ttFin = DATETIME()
ENDIF
ln = ttFin - ttIni
lnSeg = MOD(ln,60)
ln = INT(ln/60)
lnMin = MOD(ln,60)
ln = INT(ln/60)
lnHor = MOD(ln,24)
lnDia = INT(ln/24)
RETURN ALLTRIM(STR(lnDia))+ " Días, "+ ;
TRAN(lnHor, "@L 99")+ " Horas, "+ ;
TRAN(lnMin, "@L 99")+ " Minutos, "+ ;
TRAN(lnSeg, "@L 99")+ " Segundos"
ENDFUNC
*-----------------------------
Rutina para calcular la diferencia entre dos fechas en años meses y dias...
*-----------------------------------------------------
* FUNCTION Dif_AMD(tdIni, tdFin)
*-----------------------------------------------------
* Calcula la diferencia entre dos fechas en:
* años, meses y días
* Usa la función DiasDelMes()
*-----------------------------------------------------
FUNCTION Dif_AMD(tdIni, tdFin)
LOCAL ldAux, lnAnio, lnMes, lnDia, lcRet
*--- Fecha inicial siempre menor
IF tdIni>tdFin
ldAux = tdIni
tdIni = tdFin
tdFin = ldAux
ENDIF
lnAnio = YEAR(tdFin) - YEAR(tdIni)
ldAux = GOMONTH(tdIni, 12 * lnAnio)
*--- No cumplio el año aun
IF ldAux > tdFin
lnAnio = lnAnio - 1
ENDIF
lnMes = MONTH(tdFin) - MONTH(tdIni)
IF lnMes < 0
lnMes = lnMes + 12
ENDIF
lnDia = DAY(tdFin) - DAY(tdIni)
IF lnDia < 0
lnDia = lnDia + DiasDelMes(tdIni)
ENDIF
*--- Si el dia es mayor, no cumplio el mes
IF (DAY(tdFin) < DAY(tdIni))
IF lnMes = 0
lnMes = 11
ELSE
lnMes = lnMes - 1
ENDIF
ENDIF
lcRet = ALLTRIM(STR(lnAnio))+ " AÑOS, " + ;
ALLTRIM(STR(lnMes))+ " MESES Y " + ;
ALLTRIM(STR(lnDia))+ " DIAS."
RETURN lcRet
ENDFUNC
*-----------------------------------------------------
* FUNCTION DiasDelMes(dFecha)
*------------------------------------------------
* Retorna los días de un mes. Usada por Dif_AMD
*------------------------------------------------
FUNCTION DiasDelMes(dFecha)
LOCAL ld
ld = GOMONTH(dFecha,1)
RETURN DAY(ld - DAY(ld))
Endfunc

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas