DATEDIFF EM HORAS UTEIS

ICHIHARA 15/04/2011 08:25:08
#371396
Bom dia!!

Alguem tem alguma função pronta que faça o a diferenca de duas datas ex: 22/04/2011 7:30 a 30/05/2011 22:00
No caso teria que me retornar a diferenca das datas em horas desconsiderando sabado e domingos..

Abrs
SACOFRITO 15/04/2011 08:51:54
#371402
Resposta escolhida
CalculaHora(txtDataInicial & [Ô] [Ô] & txtHoraInicial, txtDataFinal & [Ô] [Ô] & txtHoraFinal)


Function CalculaHora(HrIni, HrFim) As Double
Dim dblDifHoras As Double
If IsNull(HrIni + HrFim) Then Exit Function
dblDifHoras = DateDiff([Ô]n[Ô], HrIni, HrFim)
CalculaHora = dblDifHoras / 60
End Function

Tenta isso...pra mim funciona.. peguei no Macoratti
MARCELO.TREZE 15/04/2011 10:13:49
#371426
vc quer só em horas? ou dias e horas?
SACOFRITO 15/04/2011 10:22:34
#371433
Nao tinha visto o [Ô]desconsiderando sabados e domingos[Ô].
Desconsidere..
Uso essa rotina para uma usina q nao tem dias exatos de folga. Virou - trabalhou.
SPRITU 15/04/2011 11:49:48
#371440
Eu fiz essa de presente :D

rsrsr .. eu ja tive que fazer um simulador de carregamento, e criei esta função ... pode usá-la

VB.NET
  
Dim ini_tim As Date = [Ô]08:00[Ô]
Dim fim_tim As Date = [Ô]18:00[Ô]

[ô][ô][ô] <summary>
[ô][ô][ô] Calcula a diferença entre 2 datas considerando horario comercial e finais de semana
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]date1[Ô]>data de inicio</param>
[ô][ô][ô] <param name=[Ô]date2[Ô]>data de final</param>
[ô][ô][ô] <param name=[Ô]considerwk[Ô]>define se os finais de semana devem ser considerador</param>
[ô][ô][ô] <returns></returns>
[ô][ô][ô] <remarks></remarks>
Public Function Calculate(ByVal date1 As Date, ByVal date2 As Date, Optional ByVal considerwk As Boolean = True) As Decimal

[ô]//RESULTADO
Dim _res As Integer

[ô]//ENQUANTO A DATA NAO CHEGAR
Do While date1 <= date2


[ô]//VERIFICA SE ESTA DENTRO DO INTERVALO DE HORAS
If Hour(date1) >= Hour(ini_tim) And Hour(date1) <= Hour(fim_tim) Then


[ô]//VERIFICA SE A FLAG PARA IGNORAR OS FDS ESTA ATIVA
If considerwk = True Then


[ô]//SE A DATA INCREMENTADA NAO FOR SABADO E NEM DOMINGO
If Weekday(date1) <> vbSaturday And Weekday(date1) <> vbSunday Then

[ô]//INCREMENTA O RESULTADO
_res += 1

End If

Else

[ô]//INCREMENTA O RESULTADO
_res += 1

End If

End If


[ô]//ADICIONA UM MINUTO A DATA
date1 = DateAdd([Ô]n[Ô], 1, date1)

Loop

[ô]//RETORNA A DIFERENÇA EM HORAS
Return CDec(_res / 60)

End Function



Desculpe não tinha visto que era vb6 então, fiz os ajustes para VB6
  
Private Const ini_tim As Date = [Ô]08:00[Ô]
Private Const fim_tim As Date = [Ô]18:00[Ô]

[ô][ô][ô] <summary>
[ô][ô][ô] Calcula a diferença entre 2 datas considerando horario comercial e finais de semana
[ô][ô][ô] </summary>
[ô][ô][ô] <param name=[Ô]date1[Ô]>data de inicio</param>
[ô][ô][ô] <param name=[Ô]date2[Ô]>data de final</param>
[ô][ô][ô] <param name=[Ô]considerwk[Ô]>define se os finais de semana devem ser considerador</param>
[ô][ô][ô] <returns></returns>
[ô][ô][ô] <remarks></remarks>
Public Function Calculate(ByVal date1 As Date, ByVal date2 As Date, Optional ByVal considerwk As Boolean = True) As Double

[ô]//RESULTADO
Dim res As Double

[ô]//ENQUANTO A DATA NAO CHEGAR
Do While date1 <= date2


[ô]//VERIFICA SE ESTA DENTRO DO INTERVALO DE HORAS
If Hour(date1) >= Hour(ini_tim) And Hour(date1) <= Hour(fim_tim) Then


[ô]//VERIFICA SE A FLAG PARA IGNORAR OS FDS ESTA ATIVA
If considerwk = True Then


[ô]//SE A DATA INCREMENTADA NAO FOR SABADO E NEM DOMINGO
If Weekday(date1) <> vbSaturday And Weekday(date1) <> vbSunday Then

[ô]//INCREMENTA O RESULTADO
res = res + 1

End If

Else

[ô]//INCREMENTA O RESULTADO
res = res + 1

End If

End If


[ô]//ADICIONA UM MINUTO A DATA
date1 = DateAdd([Ô]n[Ô], 1, date1)

Loop

[ô]//RETORNA A DIFERENÇA EM HORAS
Calculate = CDbl(res / 60)

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