Visual Basic - resta de tiempos

Life is soft - evento anual de software empresarial
 
Vista:

resta de tiempos

Publicado por Lily (233 intervenciones) el 25/08/2003 00:51:40
al restar dos variables as date
boton commando uno envento click: hrai=time
boton commando dos envento click: hraf=time
luego data1.recordset.fields("tiempo")=hraf-hrai

los registros se muestran en un dbgrid, la resta que deberia aparecer como 15 segundos digamos (00:00:15) aparce como (12:00:15)
yo quiero verla como 00:00:15
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:resta de tiempos

Publicado por Jorge (67 intervenciones) el 25/08/2003 03:28:55
'crea 2 textbox hora1 y hora2 y un text3 mas un command para que pruebes esto
'las horas debes tomarlas desde 00:00:00 hasta 23:59:59
Dim horas As Variant, minutos As Variant, diasdif As Variant
horatope = "23:59:59"
If Mid(hora1, 1, 2) <= Mid(hora2, 1, 2) Then
diasdif = Str(DateDiff("s", hora1, hora2))
Else
diasdif = DateDiff("s", hora1, fechatope) + 86400
diasdif = diasdif + DateDiff("s", fechatope, hora2)
End If
horas = diasdif \ 3600: diasdif = diasdif Mod 3600
horas = Format(horas, "00")
minutos = diasdif \ 60: diasdif = diasdif Mod 60
minutos = Format(minutos, "00")
diasdif = Format(diasdif, "00")
Text3 = horas & minutos & diasdif
Text3 = Format(Text3, "00:00:00")
'funciona
'chao
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:resta de tiempos

Publicado por Jorge (67 intervenciones) el 25/08/2003 03:32:43
'crea 2 textbox hora1 y hora2 y un text3 mas un command para que pruebes esto
'las horas debes tomarlas desde 00:00:00 hasta 23:59:59
Dim horas As Variant, minutos As Variant, hoarasdif As Variant
horatope = "23:59:59"
If Mid(hora1, 1, 2) <= Mid(hora2, 1, 2) Then
horasdif = Str(DateDiff("s", hora1, hora2))
Else
horasdif = DateDiff("s", hora1, fechatope) + 86400
horasdif = diasdif + DateDiff("s", fechatope, hora2)
End If
horas = horasdif \ 3600: horasdif = horasdif Mod 3600
horas = Format(horas, "00")
minutos = horasdif \ 60: horasdif = horasdif Mod 60
minutos = Format(minutos, "00")
horasdif = Format(diasdif, "00")
Text3 = horas & minutos & horasdif
Text3 = Format(Text3, "00:00:00")
'funciona
'chao
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:resta de tiempos

Publicado por Juan (284 intervenciones) el 25/08/2003 12:39:12
Creo que te estas equivocando en la forma de enfocar el problema. La diferencia entre dos horas no es una tercera hora distinta sino un número de unidades de tiempo. Dicho de otra forma, la diferencia entre las seis y las cuatro y media son 5400 segundos, 90 minutos o 1.5 horas, pero nunca la una y media.

Por eso pienso que deberías almacenar dicha diferencia con un campo de tipo long que guarde el número de segundos transcurridos. Además la forma en que pretendes hacerlo te puede causar problemas a la hora de efectuar cálculos, piensa que en una variable de tipo date no se pueden almacenar más de 24 horas, y si en algún momento quieres hacer una suma total de esas diferencias es posible que excedas ese nº de horas.

P.D.: si sigues este consejo, para posteriormente mostrar ese diferencia con formato hh:mm:ss puedes hacer algo parecido a este ejemplo:

Dim totSegs As Long
Dim h As Integer, m As Integer, s As Integer
totSegs = 5412
h = totSegs \ 3600
totSegs = totSegs - (h * 3600)
m = totSegs \ 60
s = totSegs Mod 60
txtTiempo.Text = Format(h) & ":" & Format(m, "00") & ":" & Format(s, "00")
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