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
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