CALCULO DE HORAS

CALTABIANO 01/10/2009 08:26:53
#324145
Bom dia Amigos, preciso montar uma função para calcular a diferença entre duas datas. Detalhe, esta função deve desconciderar fins de semana e feriados. Para resolver este problema dividi o desenvolvimento em duas partes.

1) Calcular a diferença entre as duas datas

2) Por meio de uma tabela onde cadatro todos os feriados e fins de semana eu verifico se entre as duas datas tem algum fim de semana ou feriado para então subtrar as horas.


Ex: Tenho que calcular assim 29/09/2009 12:53 - 01/10/2009 10:32 = 45,39 (45 Horas e 39 Minuto)

Este é o grande [Ô]X[Ô] da questão como calcular a diferenç e chegar neste resultado!!!!!

Desde já Obrigado.
NETMANIA 01/10/2009 09:03:07
#324149
Resposta escolhida
Ola Caltabiano,

Para resolver o seu problema, fiz o seguinte.

1º parte -> No banco de dados (SQL Server), uso o comando DATEDIFF(SECOND, Campo1, Campo2) para me retornar o tempo em segundos,
2º parte -> Use a função abaixo (adaptada do PHP) para converter os segundos em tempo.
3º parte -> Você formata a saída da sua função do jeito que você quiser com os valores de horas, minutos e segundos


intHoras = floor(intSegundos / 3600)
intSegundos = intSegundos - intHoras * 3600
intMinutos = floor(intSegundos / 60)
intSegundos = intSegundos - intMinutos * 60

Espero que tenha ajuda.
CALTABIANO 01/10/2009 13:58:33
#324172
Criei um função em VBA no acess para resolver isso deu certooooo segue a solução
Option Compare Database

Function CalcDataCelso(dtIni As Date, dtFim As Date)

Dim rs As Recordset
Dim vDias, Minutos, vHora, vMinuto, vCont, vAux As Integer

vAux = 0

vCont = 1
While (vCont = 1)
Set rs = CurrentDb.OpenRecordset([Ô]Select * From Tbl_Feriado Where Dia=#[Ô] & Format(dtIni, [Ô]MM/dd/yyyy[Ô]) & [Ô]#[Ô])
If Not rs.RecordCount = 0 Then
dtIni = DateAdd([Ô]d[Ô], -1, dtIni)
vAux = 1
Else
vCont = 0
End If
rs.Close
Wend

vCont = 1
While (vCont = 1)
Set rs = CurrentDb.OpenRecordset([Ô]Select * From Tbl_Feriado Where Dia=#[Ô] & Format(dtFim, [Ô]MM/dd/yyyy[Ô]) & [Ô]#[Ô])
If Not rs.RecordCount = 0 Then
dtFim = DateAdd([Ô]d[Ô], -1, dtFim)
vAux = 1
Else
vCont = 0
End If
rs.Close
Wend

If vAux = 0 Then
vDias = 0
dt = Format(dtIni, [Ô]MM/dd/yyyy[Ô])
dtFimCalc = Format(dtFim, [Ô]dd/MM/yyyy[Ô])
While DateDiff([Ô]d[Ô], dt, dtFimCalc) <> 0
Set rs = CurrentDb.OpenRecordset([Ô]Select * From Tbl_Feriado Where Dia=#[Ô] & Format(dt, [Ô]MM/dd/yyyy[Ô]) & [Ô]#[Ô])
If Not rs.RecordCount = 0 Then
vDias = vDias + 1
End If
dt = DateAdd([Ô]d[Ô], 1, dt)
Wend

End If


Minutos = DateDiff([Ô]n[Ô], dtIni, dtFim)
Minutos = Minutos - (24 * 60 * vDias)
vHora = Int(Minutos / 60)
vMinuto = Minutos Mod 60

vResult = vHora & [Ô],[Ô] & vMinuto

CalcDataCelso = vResult

End Function
Tópico encerrado , respostas não são mais permitidas