CALCULO DE HORAS
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.
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.
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.
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.
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