DateTime er en float dagstæller, så minutter mellem to tidspunker er blot produktet af 1440 og differensen mellem tidspunkterne - evt underkaster funktionen round for at få fjernet decimalafrundingsfejl.
Const startTid = "07:00" Const slutTid = "17:00" Dim fraDato As Date, tilDato As Date, d As Date Dim total As Integer, minutter As Integer, fraKl As Date, tilKl As Date Public Sub optælTilMinutter() total = beregnTotalMin(fraDag, tilDag) MsgBox total End Sub Private Function beregnTotalMin(fraD, tilD) Dim aktuelleDato minutter = 0 fraDato = Replace(fraD, ".", "-") tilDato = Replace(tilD, ".", "-")
For d = fraDato To tilDato Rem test ugedag - MAN-FRE If Weekday(d, vbMonday) < 6 Then aktuelleDato = Format(d, "dd-mm-yyyy")
Rem er det første dag If d = fraDato Then fraKl = Format(fraDato, "hh:mm") tilKl = slutTid
If fraKl < startTid Then fraKl = startTid End If End If
Rem er det sidste dato If aktuelleDato = Format(tilDato, "dd-mm-yyyy") Then tilKl = Format(tilDato, "hh:mm") If tilKl > slutTid Or tilKl < startTid Then tilKl = slutTid End If End If
Rem øvrige dage If aktuelleDato > Format(fraDato, "dd-mm-yyyy") And aktuelleDato < Format(tilDato, "dd-mm-yyyy") Then fraKl = startTid tilKl = slutTid End If
minutter = minutter + DateDiff("n", fraKl, tilKl) End If Next d beregnTotalMin = minutter End Function
Rem Version 2 Const fraDag = "12.02.2014 11:50" 'Test Const tilDag = "18.03.2014 11:27" '-"-
Const startTid = "07:00" Const slutTid = "17:00" Dim fraDato As Date, tilDato As Date, d As Date Dim total As Integer, minutter As Integer, fraKl As Date, tilKl As Date, flag As Boolean Public Sub optælTilMinutter() total = beregnTotalMin(fraDag, tilDag) MsgBox total End Sub Private Function beregnTotalMin(fraD, tilD) Dim aktuelleDato minutter = 0 fraDato = Replace(fraD, ".", "-") tilDato = Replace(tilD, ".", "-") flag = False
For d = fraDato To tilDato Rem test ugedag - MAN-FRE If Weekday(d, vbMonday) < 6 Then aktuelleDato = Format(d, "dd-mm-yyyy")
Rem er det første dag If d = fraDato Then fraKl = Format(fraDato, "hh:mm") tilKl = slutTid
If fraKl < startTid Then fraKl = startTid End If End If
Rem er det sidste dato If aktuelleDato = Format(tilDato, "dd-mm-yyyy") Then flag = True tilKl = Format(tilDato, "hh:mm") If tilKl > slutTid Or tilKl < startTid Then tilKl = slutTid End If End If
Rem øvrige dage If aktuelleDato > Format(fraDato, "dd-mm-yyyy") And aktuelleDato < Format(tilDato, "dd-mm-yyyy") Then fraKl = startTid tilKl = slutTid End If
minutter = minutter + DateDiff("n", fraKl, tilKl) End If Next d
Rem Test om sidste dag er beregnet If flag = False Then minutter = minutter + DateDiff("n", startTid, Format(tilDato, "hh:mm")) End If
Det giver et nyt resultat, 13777 minutter, men desværre ikke de 14377 minutter jeg havde håbet på. Det er 10 timer der mangler. Glemmer den evt. en dag eller er det mig der har lavet en fejl i udregningen?
Når jeg kører version 2 med de deri indsatte datoer - så bliver resultatet: 14377
PS: Jeg bemærkede også en lille forskel i kørslen af version 1 i dit resultat sammenlignet med mit. I mit kunne jeg se at det var den sidste dag der manglede.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.