
Calcular dias y horas entre 2 fechas
Power Builder
Publicado el 24 de Diciembre del 2002 por Victor Arreola (5 códigos)
40.622 visualizaciones desde el 24 de Diciembre del 2002
Función que calcula dias y horas entre 2 fechas
/**********************************************************************
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***************************************/
Comentarios sobre la versión: Versión 1 (4)
chau
chau