FoxPro/Visual FoxPro - funciones para manejar horas

 
Vista:

funciones para manejar horas

Publicado por Mauricio (105 intervenciones) el 05/01/2005 17:08:27
Hola amigos, tengo dos campos "HORA INICIO" y "HORA FIN" los cuales son caracter de 5. lo que necesito es poder hacer operaciones como: (suponiendo que HORAINICIO = 11:00)
Ejemplos:
HORAINICIO+1 = 11:01
HORAINICIO -1 = 10:59
Esto es posible, estub viendo las funciones datetime pero se complica demaciado ya que me pide fechas como parametros, y tengo que hacer muchas conversiones, pense que tal vez hay una forma mas sencilla de hacerlo.

desde ya muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:funciones para manejar horas

Publicado por Hugo Alberto (42 intervenciones) el 05/01/2005 17:54:10
Hola MAURICIO

Te paso un pequeño código:

a1 = HORAINICIO
ti = MINUTOS A SUMAR o RESTAR

min1 = val(substr(a1,1,2))*60
t1 = min1+val(substr(a1,4,2))+ti
ho = int(t1/60)
mi = t1-(ho*60)
hora = righ(str(ho+100,3),2)+':'+righ(str(mi+100,3),2)

Deberás hacer modificaciones si deseas que funcione cuando la HORA pase para OTRO DÍA.

Espero te sirva. Avisa acá cómo te fue.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:funciones para manejar horas

Publicado por Mauricio (105 intervenciones) el 06/01/2005 02:29:10
Gracias por contestarme, tu funcion no me servia para mi proposito pero si me ayudo a guiarme y arme una que funciona de la forma que yo necesitaba, te la paso asi la probas y me contas.

Procedure SRHORA
Parameters cHoraMinuto, nSRHora, nSRMinutos, nTipoRelog
LOCAL nMin, nHora, cHoraCalculada, cHora, cMin

nHora = VAL(SUBSTR(cHoraMinuto,1,2))
nMin = VAL(SUBSTR(cHoraMinuto,4,2))
nMin = nMin+nSRMinutos
nHora = nHora+INT(nMin/60)+nSRHora
nMin = ABS(INT(nMin/60)*60-nMin)
cMin = IIF(LEN(ALLTRIM(STR(nMin)))=1, '0'+ALLTRIM(STR(nMin)), ALLTRIM(STR(nMin)))

nMin = VAL(SUBSTR(cHoraMinuto,4,2))
nHora = IIF(nTipoRelog = 12, ABS(INT(nHora/12)*12-INT(nHora)), ABS(INT(nHora/24)*24-INT(nHora)))

cHora = IIF(LEN(ALLTRIM(STR(nHora)))=1, '0'+ALLTRIM(STR(nHora)), ALLTRIM(STR(nHora)))

cHoraCalculada = cHora+':'+cMin
RETURN cHoraCalculada

EndProc

DESCRIPCION DE PARAMETROS:

cHoraMinuto: recibe la hora en caracter de 5 ej: (11:00)
nSRHora: recibe un valor numerico entero cualquiera, negativo en caso de querer restar.
nSRMinutos: idem al anterio pero con los minutos
nTipoRelog: los valores recibidos pueden ser: 12 o 24 segun que tipo de reloj queramos, lo unico que faltaria seria validarla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar