arnelgp
..forever waiting... waiting for jellybean!
- Local time
- Today, 08:45
- Joined
- May 7, 2009
- Messages
- 20,186
i hope this one will get it right:
Code:
Public Function ExtractionHours(d1 As Date, d2 As Date) As Double
Const timeStart As String = " 8 am"
Const timeEnd As String = " 5 pm"
Const hr1 As Double = 4.16666666715173E-02
Const Min1 As Double = 6.94444444444442E-04
Dim dDate As Date
Dim timeInMin As Double
If d1 > d2 Then
dDate = d1
d1 = d2
d2 = dDate
End If
Select Case (True)
Case DateValue(d1) = DateValue(d2)
If InStr(1, "Saturday, Sunday", Format(d1, "dddd")) = 0 Then
d1 = maxAmong(d1, CDate(DateValue(d1) & timeStart))
dDate = minAmong(d2, CDate(DateValue(d2) & timeEnd))
timeInMin = CDec(dDate) - CDec(d1)
End If
Case DateDiff("d", CDate(DateValue(d1)), CDate(DateValue(d2))) = 1
If InStr(1, "Saturday, Sunday", Format(d1, "dddd")) = 0 Then
d1 = maxAmong(d1, CDate(DateValue(d1) & timeStart))
timeInMin = timeInMin + CDec(CDate(DateValue(d1) & timeEnd)) - CDec(d1)
End If
If InStr(1, "Saturday, Sunday", Format(d2, "dddd")) = 0 Then
d2 = minAmong(d2, CDate(DateValue(d2) & timeEnd))
timeInMin = timeInMin + CDec(d2) - CDec(CDate(DateValue(d2) & timeStart))
End If
Case Else
If InStr(1, "Saturday, Sunday", Format(d1, "dddd")) = 0 Then
d1 = maxAmong(d1, CDate(DateValue(d1) & timeStart))
timeInMin = timeInMin + CDec(CDate(DateValue(d1) & timeEnd)) - CDec(d1)
End If
If InStr(1, "Saturday, Sunday", Format(d2, "dddd")) = 0 Then
d2 = minAmong(d2, CDate(DateValue(d2) & timeEnd))
timeInMin = timeInMin + CDec(d2) - CDec(CDate(DateValue(d2) & timeStart))
End If
For dDate = CDate(DateValue(d1)) + 1 To CDate(DateValue(d2)) - 1
If InStr(1, "Saturday, Sunday", Format(dDate, "dddd")) = 0 Then
timeInMin = timeInMin + (9# * hr1)
End If
Next
End Select
If timeInMin > 0 Then
ExtractionHours = Round(timeInMin / 60 / Min1, 2)
End If
End Function