Está en la página 1de 2

/**********************************************************************

Lenguaje: Power Builder 6.5(sirve para ver. 5,6,6.5,7...)


Funcion PB: Calcular dias y horas entre 2 fechas.
Retorna : string '380 Dias 23 horas 48 minutos 58 segundos'
Ejemplo : ls_diferencia = fx_tiempo_dif( ldt_fecha_inicial , ldt_fecha_final
)
Sintaxis: string fx_tiempo_dif(datetime arg_dt_tiempo1 ,datetime
arg_dt_tiempo2)
Autor : Lic. Victor Arreola //:-)
**********************************************************************/
Declara Funcion fx_: string fx_tiempo_dif(datetime arg_dt_tiempo1 ,datetime
arg_dt_tiempo2)

dec {18} ldec_hora=0,ldec_min=0,ldec_seg=0,ldec_paso=0


long ll_dias
String ls_Dias='Dias ' ,ls_tiempo

// el tiempo natural equivale a:


// dia natural = 24 Horas naturales de reloj
// = 00:00:00 horas al 23:59:59 horas naturales

IF ISNULL(arg_dt_tiempo1) OR ISNULL(arg_dt_tiempo2) THEN //valida


parametros completos
RETURN ''
Endif

IF date(arg_dt_tiempo1) > date(arg_dt_tiempo2) THEN //Valida la


diferencia en dias
RETURN '*Post-Fechado*(Fecha Inicial es mayor que Final.)'
End if

ll_dias= DaysAfter( date(arg_dt_tiempo1), date(arg_dt_tiempo2) ) //obtiene


los dias trancurridos

ldec_paso = SecondsAfter( time(arg_dt_tiempo1), time(arg_dt_tiempo2))


//obtiene los segundos trancurridos

if ldec_paso<> abs(ldec_paso) and ll_dias<>0 then //si los seg.son


negativos( 10:00 vs 8:00 ) quiere decir que no transcurrido/conto el ultimo
dia
ll_dias = ll_dias - 1 //se resta el dia no
trancurrido
ldec_paso = (24*60*60) + ldec_paso //se ajusta la diferencia de
horas
end if

ldec_seg = round(Mod(ldec_paso,60),2) // se obtienen el residuo en


segundos con el total de segundos.

ldec_paso = Truncate(round(ldec_paso/60,2),0) // quitas el residuo anterior


y quedan en segundos completos para formar minutos y horas(son multiplos).

ldec_min = round(Mod(ldec_paso,60),2) // se obtienen el residuo en


minutos.

ldec_hora = Truncate(round(ldec_paso/60,2),0) // quitas el residuo anterior


y formas las horas.
//aqui se pueden continuar desglozando las operaciones para obtener
dias,mes,años...

//concatena cadena a retornar


ls_tiempo = string(ll_dias,'##000')+'
'+ls_Dias+string(ldec_hora,'#00:')+string(ldec_min,'00:')+string(ldec_seg,'00')

return ls_tiempo
/*eof funcion fx_tiempo_dif***************************************/

También podría gustarte