Imprimir página | Cerrar ventana

Comparar horas de variable fecha

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84704
Fecha de impresión: 11/Julio/2020 a las 15:49


Tema: Comparar horas de variable fecha
Publicado por: pascual14
Asunto: Comparar horas de variable fecha
Fecha de publicación: 13/Septiembre/2019 a las 19:47


Hola amigos, tengo un problema que no sé como solucionar. Tengo una función a la que le paso una hora tipo 30/09/2019 5:00:00 de esa fecha tomo la hora en formato corto y luego la comparo para saber a que turno de trabajo pertenece. Tengo 3 de 6:00 a 14:00 de 14:00 a 22:00 y de 22:00 a 6:00. La cosa es que funciona bien menos con algunas horas, por ejemplo la hora 5:00:00 que no entiende que es el tercer turno y no sé por qué. ¿alguna idea de que hago mal? o es que esto se hace de otra forma? esta es mi función. Gracias.

Private Function CalculaTurno(datFechaHora As Date) As Byte
   Dim datHora As Date, bytTurno As Byte
   
   datHora = Format(datFechaHora, "Short Time"): bytTurno = 0
   If datHora >= #6:00:00 AM# And datHora <= #2:00:00 PM# Then
      bytTurno = 1  ' Primer turno. Mañana
   End If
   If datHora > #2:00:00 PM# And datHora <= #10:00:00 PM# Then
      bytTurno = 2  ' Segundo  turno. Tarde
   End If
   If datHora > #10:00:00 PM# And datHora < #6:00:00 AM# Then
      bytTurno = 3  ' Tercer turno. Noche
   End If
   CalculaTurno = bytTurno
End Function




Respuestas:
Publicado por: Mihura
Fecha de publicación: 13/Septiembre/2019 a las 20:39
Emplea la función Hour ...

Hora = Hour(datfechaHora)
If Hora > 6 then
     ....
     elseif hora > 14
     .....
     else > 22
     .....
end if


Edito: ... por cierto, por estas cosas yo siempre separo en dos campos fecha y hora ... Wink


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: mounir
Fecha de publicación: 13/Septiembre/2019 a las 20:40
Hola!

Es normal que te dé problemas, aquí declaras la hora como corta y luego en las condiciones "If" la pones como hora larga.

lo correcto sería:

datHora = Format(datFechaHora, "Long Time")

-------------
Un Saludo.


Publicado por: fcoval
Fecha de publicación: 13/Septiembre/2019 a las 20:58
Justamente esta mañana he tenido que usar algo parecido...

Cita
Function CalculaTurno(datFechaHora As Date) As Byte

   Dim datHora As Variant, bytTurno As Byte
       
   bytTurno = 0
   datHora = Hour(datFechaHora)

   Select Case datHora
   
    Case 6, 7, 8, 9, 10, 11, 12, 13
    bytTurno = 1 ' Primer turno. Mañana
   
    Case 14, 15, 16, 17, 18, 19, 20, 21
    bytTurno = 2 ' Segundo turno. Tarde
   
    Case 22, 23, 0, 1, 2, 3, 4, 5
    bytTurno = 3 ' Tercer turno. Noche
   
   End Select


   CalculaTurno = bytTurno

End Function

---------------------------------
Sub test()
Debug.Print CalculaTurno2(#9/30/2019 5:00:00 AM#)
End Sub



Publicado por: emiliove
Fecha de publicación: 13/Septiembre/2019 a las 23:04
Otra:

Function CalculaTurno(datFechaHora As Date) As Byte
   Dim datHora As Date, bytTurno As Byte
  
   datHora = Format(datFechaHora, "Short Time") ': bytTurno = 0
     
   If CDbl(datHora) < CDbl(#6:00:00 AM#) Then
      bytTurno = 3  ' Tercer turno. Noche
   ElseIf CDbl(datHora) <= CDbl(#2:00:00 PM#) Then
      bytTurno = 1  ' Primer turno. Ma?ana
   ElseIf CDbl(datHora) <= CDbl(#10:00:00 PM#) Then
      bytTurno = 2  ' Segundo  turno. Tarde
   Else
      bytTurno = 3  ' Tercer turno. Tarde
   End If
   CalculaTurno = bytTurno
End Function



Publicado por: pascual14
Fecha de publicación: 14/Septiembre/2019 a las 09:55
Hola amigos, primero dar las gracias pro la ayuda. Ya he probado esto y me doy cuenta que se me olvidó detallar que a veces tengo que calcular el turno de todas no enteras, pro ejemplo las 14:30, con lo que la función hour no me sirve porque me devuelve 14, me diría que es del tuno de mañana y en realidad es el de tarde. La que si que me ha servido es la función de emiliove. La verdad es que no me ha tocado casi nada trabajar con horas. Gracias de nuevo. Podéis cerrar el hilo.



Imprimir página | Cerrar ventana