|
|
Fechas : TimeToString
| Autor/es: Juan M. Sánchez | | Pregunta : Estoy haciendo un sistema de control horario y me encuentro con una dificultad que no se resolver. En una tabla tengo una serie de campos tipo Fecha/Hora, en donde se almacenan los tiempos de trabajo del personal. Cuando intento sumar esos tiempos para sacar un total, si el valor acumulado de horas es mayor de 24, vuelve a empezar desde 0. Es decir, 13:00:00 + 12:00:00 me lo representa como 1:00:00 y yo, lo que quiero, es que me lo represente como 25:00:00. ¿Es eso posible o es que Access no mueve horas mayores de 24 horas? | Respuesta : Access sí entiende horas más allá de 24 horas, pero lo que hace cuando se encuentra en un caso como ese es internamente almacenar un día y empezar a contar horas desde cero. Es decir, en el caso de 13:00:00 + 12:00:00, lo que hace Access es 1 día + 1:00:00, pero como el usuario ha pedido que se represente sólo la parte de las horas para ese campo, pues Access sumiso y obediente, le hace caso y eso es lo que el usuario ve al final.
Lo que necesitamos es una función que transforme el resultado de esa suma o valor y le de el formato que nosotros necesitamos en casos como éste.
La función TimeToString transforma un valor tipo fecha (que internamente es un valor doble) a una cadena del tipo hora larga ("00:00:00").
Tiene los siguientes | Argumentos | Argumento | Descripción | | Interval | Requerido. Un número doble representando una fecha. Puede venir de la suma de dos o más fechas o simplemente puede ser un número de tipo doble. |
| | Su uso es muy simple. Aquí pongo algún ejemplo de uso: | ' Esto devolverá "47:59:58"
MsgBox TimeToString(CDate("23:59:59") + CDate("23:59:59"))
' Esto devolverá "24:00:00"
MsgBox TimeToString(CDbl(1))
' Esto devolverá "86:00:00"
Dim hora1 As Date, hora2 As Date
Dim hora3 As Date, hora4 As Date
hora1 = CDate("20:00:00")
hora2 = CDate("21:00:00")
hora3 = CDate("22:00:00")
hora4 = CDate("23:00:00")
MsgBox TimeToString(hora1 + hora2 + hora3 + hora4)
| | Pega esta función en un módulo estandar | '---------------------------------------------------------
'
' TimeToString
'
' Código escrito originalmente por Juan M. Sánchez.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
'
' Este código se brinda por cortesía de
' Juan M. Sánchez
'
Function TimeToString(Interval As Double) As String
TimeToString = DateDiff("h", 0, Interval) & _
Format$(Interval, ":nn:ss")
End Function
'---------------------------------------------------------
| Ejemplos: | Temas relacionados: StrTimeToDate |
|