Oprettet tir. d. 02. oktober 2007 kl. 14:42:43

anders0710
anders0710 (16.885 point. Point ude: 800)

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

Skrevet tir. d. 02. oktober 2007 kl. 14:57:49| #1

darrich
darrich (30.332 point)
Der findes en bedre custom function http://www.pacificdb.com.au/ (...)

Skrevet tir. d. 02. oktober 2007 kl. 14:59:28| #2

darrich
darrich (30.332 point)
Hvad jeg husker er det integer som datadiff returnerer, ergo ingen kommatal fra den funktion.

Skrevet tir. d. 02. oktober 2007 kl. 16:08:16| #3

sjap
sjap (62.466 point)
Prøv med:

varighedsres = DateDiff(interval:="d", Date1:=startDato, Date2:=slutdato)/365*12

Skrevet tir. d. 02. oktober 2007 kl. 16:11:07| #4

sjap
sjap (62.466 point)
Nåh ja, så vil det jo være lettere blot at skrive:

varighedsres = (slutdato-startdato)/365*12

Skrevet tir. d. 02. oktober 2007 kl. 19:44:35| #5

anders0710
anders0710 (16.885 point)
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

Skrevet tir. d. 02. oktober 2007 kl. 19:45:27| #6

anders0710
anders0710 (16.885 point)
Hvad syntes i om det jeg har fundet frem til?

Skrevet tir. d. 02. oktober 2007 kl. 20:23:33| #7

sjap
sjap (62.466 point)
Hvorfor gøre det nemt, hvis man kan gøre det svært ;0)

Skrevet tir. d. 02. oktober 2007 kl. 20:29:43| #8

sjap
sjap (62.466 point)
Så vidt jeg lige kan se, så regner den ikke helt korrekt. Resultatet bliver 1,07 hvis forskellen er præcist én måned.

Skrevet tir. d. 02. oktober 2007 kl. 20:43:34| #9

sjap
sjap (62.466 point)
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.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

bnb

Oprettet den 26. maj 2012 kl. 14.33
mikkelfraringsted giver 200 point for svar | Giv et svar »

Opdatering af data fra 1 tabel til 1 anden

Oprettet den 25. maj 2012 kl. 21.05
mllarsen giver 30 point for svar | Giv et svar »

relink tables

Oprettet den 25. maj 2012 kl. 11.14
larsgrau giver 150 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger