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