Diferencia entre 2 fechas sin contar sábado, domingo y feriado

Apelo a su buena onda y voluntad, agradezco mucho si alguien me podría decir tengo que comparar un campo de una tabla que contiene fechas y horarios por ej

22/10/2019 09:18:00 con otro campo de otra tabla que tiene los feriados por ejemplo la tabla contiene los siguientes datos

22/10/2019

24/12/2019.  ... El problema que tengo entiendo es que como en un campo hay fecha y hora y en otro sólo fecha no corre bien el código... No debo modificar el campo de fechas y hora porque necesito la diferencia exacta. Por lo que estuve probando al sacarle la hora a ese campo me toma bien los feriados, pero no me sirve esto porque si la diferencia se pasa de 24 hs no da el resultado real.

Alguien por favor que me dé una mano.

2 Respuestas

Respuesta
2

En Access esa función no te sirve. Por otro lado, ningún ordenador del mundo trabaja con fechas ni con horas. Trabajan con números. Al día 01/01/1900 se le asignó el 1, al día 02/01/1900 se le asignó el 2 y así hasta hoy. Las horas, minutos y segundos, tal como las ves no existen, son decimales de día. Por eso cuando restas no te saldría bien.

Mira, si tengo un formulario donde anoto una fecha y hora ini, y una fecha y hora fin, lo que realmente usa el ordenador es lo que ves a su derecha, su valor decimal.

Es decir, que cuando escribes la fecha ini, realmente está escribiendo lo que ves a su derecha. El día 43506 desde el 01/01/1900 y la parte decimal corresponde a 17:45:00. Lo mismo para FechaFin. Por lo que su diferencia real es lo que ves en negrita 100 días y 0,4... de día. Por otro lado, si tengo una tabla Festivos(puestos al azar)

Entonces, al escribir la fecha fin

El código del evento Después de actualizar del cuadro de texto FechaFin es

Private Sub FechaFin_AfterUpdate()
Festivos = DCount("*", "festivos", "fecha between forms!tabla1!fechafin and forms!tabla1!fechaini")
Dim i As Integer, c As Integer
i = FechaFin - FechaIni
For c = 1 To i
If Format(FechaIni + c, "dddd") = "domingo" Then
Domingos = Nz([Domingos], 0) + 1
ElseIf Format(FechaIni + c, "dddd") = "sábado" Then
Sabados = Nz([Sabados], 0) + 1
End If
Next
Quedan = DIF - Festivos - Sabados - Domingos
Dias = Int([Quedan])
Horas = (Quedan - Int([Quedan])) * 24
Minutos = (Horas - Int([Horas])) * 60
Segundos = (Minutos - Int([Minutos])) * 60
Resultado = Dias & " " & "días " & " y " & Format(Int([Horas]), "00") & ":" & Format(Int([Minutos]), "00") & ":" & Format(Int([Segundos]), "00")
End Sub

Que se podría simplificar bastante pero he preferido ponerlo extendido para que se vea.

Tiene la ventaja, entre otras que no tienes que preocuparte por la configuración regional de tu ordenador, ya que no tiene en cuenta si el primer día de la semana es domingo o lunes o martes, etc, ya que cuenta números.

Muchísimas gracias por tu respuesta!!

Entendiste bien mi problema y es justo la solución que necesito . Fuiste de mucha ayuda muchas Por tu tiempo!!!!

Respuesta
1

Revisa la función

=DIAS.LAB.INTL(fechaInicial;fechaInicial;1;listaFestivos)

el 1 es para indicar que no considere los sábados y domingos, el listado completo de opciones lo puedes ver ACÁ

Salu2

Para sacarle la hora podrías usar la función entero...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas