Avatar billede anders0710 Nybegynder
02. oktober 2007 - 14:42 Der er 8 kommentarer og
1 løsning

Præcis dato interval

Hey Experter

Jeg har brug for en præcis angivelse af et dato interval mellem to datoer.
Jeg har følgende kode som jeg arbejder med:
Private Sub Varighed_Enter()

Dim startDato As Date
Dim slutdato As Date
Dim varighedsres As Double
Dim resYear As Integer
Dim resMonth As Integer
Dim resDay As Integer

startDato = Forms!Opret_ophold!Fra_dato
slutdato = Forms!Opret_ophold!Til_dato
varighedsres = DateDiff(interval:="m", Date1:=startDato, Date2:=slutdato)
Forms!Opret_ophold!Varighed = varighedsres
End Sub

Mit problem er at funktionen DateDiff resturnere forskellen mellem to tal i hele tal.

F.eks. forskellen mellem 15-07-1996 og 01-08-1997 er præcist 12,6 måneder, men ved at bruge DateDiff fås 13 måneder.

Hvordan kan jeg ændre min kode, så jeg får resultatet ud præcist, altså på formatet 12,6 måneder?????

Venlig hilsen
duus0710
Avatar billede darrich Novice
02. oktober 2007 - 14:57 #1
Der findes en bedre custom function http://www.pacificdb.com.au/MVP/Code/Diff2Dates.htm
Avatar billede darrich Novice
02. oktober 2007 - 14:59 #2
Hvad jeg husker er det integer som datadiff returnerer, ergo ingen kommatal fra den funktion.
Avatar billede sjap Praktikant
02. oktober 2007 - 16:08 #3
Prøv med:

varighedsres = DateDiff(interval:="d", Date1:=startDato, Date2:=slutdato)/365*12
Avatar billede sjap Praktikant
02. oktober 2007 - 16:11 #4
Nåh ja, så vil det jo være lettere blot at skrive:

varighedsres = (slutdato-startdato)/365*12
Avatar billede anders0710 Nybegynder
02. oktober 2007 - 19:44 #5
Her er den løsning som jeg selv er kommet frem til:

Private Sub Varighed_Enter()

Dim startDato As String
Dim slutdato As String
Dim TestDato As String

Dim varighedsres As Integer
Dim dag1 As Integer
Dim dag2 As Integer
Dim PartofMonth As Integer
Dim month As Integer
Dim month2 As Integer
Dim antaldage As Integer

Dim Skudår As Boolean

Dim måned

startDato = Forms!Opret_ophold!Fra_dato
slutdato = Forms!Opret_ophold!Til_dato

month = Val(Mid(startDato, 4, 2))
month2 = Val(Mid(slutdato, 4, 2))

måned = month 'Angivelse af måneden til første gennemkørelse af hver case
Select Case måned
Case 1, 3, 5, 7, 8, 10, 12 'Case hvor antalet af dage i en måned sættes til 31
    antaldage = 31
    dag1 = Val(Mid(startDato, 1, 2))
Case 4, 6, 9, 11 'Case hvor antalet af dage i en måned sættes til 30
    antaldage = 30
    dag1 = Val(Mid(startDato, 1, 2))
Case 2 'Case hvor der tages højde for skud år
    TestDato1 = "29-02-" & Val(Mid(startDato, 7, 4))
    If IsDate(TestDato1) Then
        Skudår = True
        antaldage = 29
        dag1 = Val(Mid(startDato, 1, 2))
    Else
        Skudår = False
        antaldage = 28
        dag1 = Val(Mid(startDato, 1, 2))
   
    End If
End Select

måned = month2 'Angivelse af månden til anden gennemkørelse af hver case for datoen slutdato
Select Case måned
Case 1, 3, 5, 7, 8, 10, 12 'Case hvor antalet af dage i en måned sættes til 31
    antaldage = 31
    dag2 = Val(Mid(slutdato, 1, 2))
Case 4, 6, 9, 11 'Case hvor antalet af dage i en måned sættes til 30
    antaldage = 30
    dag2 = Val(Mid(slutdato, 1, 2))
Case 2 'Case hvor der tages højde for skud år
    TestDato1 = "29-02-" & Val(Mid(slutdato, 7, 4))
    If IsDate(TestDato1) Then
        Skudår = True
        antaldage = 29
        dag2 = Val(Mid(slutdato, 1, 2))
    Else
        Skudår = False
        antaldage = 28
        dag2 = Val(Mid(slutdato, 1, 2))
    End If
End Select
        varighedsres = DateDiff(interval:="m", Date1:=CDate(startDato), Date2:=CDate(slutdato)) 'Udregning af antallet af måneder fra startdato til slutdatoen
        Forms!Opret_ophold!Varighed = varighedsres + (dag1 / antaldage) + (dag2 / antaldage) 'Angivelse af den samlede tid mellem de to måneder.
End Sub
Avatar billede anders0710 Nybegynder
02. oktober 2007 - 19:45 #6
Hvad syntes i om det jeg har fundet frem til?
Avatar billede sjap Praktikant
02. oktober 2007 - 20:23 #7
Hvorfor gøre det nemt, hvis man kan gøre det svært ;0)
Avatar billede sjap Praktikant
02. oktober 2007 - 20:29 #8
Så vidt jeg lige kan se, så regner den ikke helt korrekt. Resultatet bliver 1,07 hvis forskellen er præcist én måned.
Avatar billede sjap Praktikant
02. oktober 2007 - 20:43 #9
Nu ved jeg jo ikke, hvad det er du skal bruge det til, men giver det overhovedet nogen mening at skelne mellem om det måneder med 28, 29, 30 eller 31 dage?

For det første er forskellen i virkeligheden ikke ret stor, når man betragter resultatet som måneder med en decimal.

For det andet er det vel ikke rimeligt at sige at f.eks. to personer har brugt lige lang tid på et stykke arbejde, hvis den ene har brugt en måned i februar og den anden en måned i marts. Så vidt jeg lige kan se, så skal det i begge tilfælde give 1,0 måned med din funktion. Men i virkeligheden har den ene brugt 10 procent mere tid på det.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester