Avatar billede peterp1 Nybegynder
20. november 2001 - 00:10 Der er 7 kommentarer og
3 løsninger

Antal dage mellem 2 datoer

Hej alle

Er der nogen som kan hjælpe mig med et script som udregner antal arbejdsdage ud fra to datoer indtastet i en form.

skal altså trække lørdag søndag fra, samt de kendte helligdage.
Avatar billede cliche Nybegynder
20. november 2001 - 00:11 #1
Du skal bruge funktionen datediff
Avatar billede jumario Nybegynder
20. november 2001 - 08:50 #2
Brug antaldage = datediff(d, dato1, dato2)
D giver antallet af dage
hvis du skal bruge arbejdsdage bliver det straks mere avanceret. Helldigdage ka jeg ik se nogen anden mulighed end at skrive dem alle manuelt (evt. ind i en database) og derefter checke hver eneste dag i rangen og lave antaldage = antaldage -1 for hver helligdag der kommer imellem
Avatar billede peterp1 Nybegynder
20. november 2001 - 09:54 #3
Er der nogen som har et bud på hvordan jeg trækker lørdag-søndag fra ????
Avatar billede tmceu Praktikant
20. november 2001 - 11:17 #4
Du burde kunne bruge denne funktion

tempDays = datediff(d, dato1, dato2)

For i = 1 to tempDays
NewDate = DateAdd(\"d\", i, dato1)
MyWeekDay = Weekday(NewDate)

If MyWeekDay < 6 then
  MyDays = MyDays + 1
end if
Next

Har ikke testet den, men den bør da i hvert tilfælde give dig en ide om løsningen.
Avatar billede soerens Nybegynder
20. november 2001 - 14:37 #5
Hmmm, denne funktion lægger et antal arbejdsdage til en given dato (...og den er testet ;-). Burde måske kunne give dig lidt inspiration.

Function WorkdayAdd(ByVal dtmDate, intNumber)
    If intNumber > 0 Then
        For i = 1 To intNumber
            dtmDate = DateAdd(\"d\", 1, dtmDate)
            If (DatePart(\"w\", dtmDate) = 7) Or (DatePart(\"w\", dtmDate) = 1) Then i = i -1
        Next
    Else
        For i = -1 To intNumber Step -1
            dtmDate = DateAdd(\"d\", -1, dtmDate)
            If (DatePart(\"w\", dtmDate) = 7) Or (DatePart(\"w\", dtmDate) = 1) Then i = i +1
        Next
    End If
    WorkdayAdd = dtmDate
End Function
Avatar billede soerens Nybegynder
20. november 2001 - 14:46 #6
....prøv denne funktion:

Function WorkdayDiff(dtmStart, dtmEnd)
    WorkdayDiff = 0
    For i = 1 To DateDiff(\"d\", dtmStart, dtmEnd)
        If DatePart(\"w\", dtmStart + i) <> 7 And DatePart(\"w\", dtmStart + i) <> 1 Then WorkdayDiff = WorkdayDiff +1
    Next
End Function

Du skal nok teste den grundigt, især omkring årskiftet, da DatePart og DateDiff er rimeligt afhængige af datoindstillingerne på din server.

/SoerenS
Avatar billede peterp1 Nybegynder
22. november 2001 - 14:51 #7
Tak for de gode svar

Der skal nok snart falde nogle point.....

Men først kan I så ikke lige svare mig på følgende:

følgende sql sætning laver ballade.

Datostreng = \"select * from helligdage WHERE (Helligdag >= \"&Datoen1&\" and Helligdag1 <= \"&Datoen2&\")\"
Set res = Server.CreateObject(\"ADODB.RecordSet\")
res.Open Datostreng, Conn, 1, 3

Datoen1 og Datoen2 er begge talværdier hentet fra en formular. eks. 20010101

helligdag er også talværdier.

Hvis jeg sætter 2 datoer ind i koden virker det.

Jeg får følgende fejl:

Microsoft VBScript runtime error \'800a0009\'

Subscript out of range: \'[number: 2]\'

Avatar billede peterp1 Nybegynder
22. november 2001 - 14:55 #8
UUUUUndskyld problemet er løst.
Avatar billede soerens Nybegynder
22. november 2001 - 15:08 #9
Hov, kom lige til at se at min Function laver unødvendigt mange kald til DatePart....

Nedenstående er optimeret lidt, laver halvt så mange kald (er dog ikke testet):

Function WorkdayDiff(dtmStart, dtmEnd)
    WorkdayDiff = 0
    For i = 1 To DateDiff(\"d\", dtmStart, dtmEnd)
    intDoW = DatePart(\"w\", dtmStart + i)
        If intDoW <> 7 And intDoW <> 1 Then WorkdayDiff = WorkdayDiff +1
    Next
End Function
Avatar billede peterp1 Nybegynder
24. november 2001 - 14:47 #10
Da ingen gav et komplet løsningssvar på mit spørgsmål trækker jeg 100 point fra.

TMCEU: 100 point for et næsten rigtigt svar, vedr. uge minus lør-søn, ugen i dit svar går fra søndag til  og med torsdag.

SOERENS: 50 point for svaret dog hverken testet eller brugt.

Håber at I kan leve med pointfordelingen.
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
Kurser inden for grundlæggende programmering

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