Avatar billede sorenmt84 Juniormester
06. november 2007 - 13:06 Der er 12 kommentarer og
1 løsning

Antal mandage, tirsdage osv, i en periode

Kan man ikke på en eller anden måde finde ud af hvor mange af de forskellige ugedage der optræder i en periode, der fx hedder 01-11-2007 - 15-11-2007
Så jeg får en liste nogenlunde som denne:
Mandag: 3
Tirsdag: 2
Onsdag: 2
osv. osv.
Avatar billede Søren Bech Morsing Praktikant
06. november 2007 - 20:03 #1
Jeg ville benytte: Weekday(MyDate)

' dage Array
dagsAntal[7]

'Lav en løkke
for i = startdato to slutdato
  dagsAntal[Weekday(i)] = dagsAntal[Weekday(i)] + 1
next i

Det er selvfølgelig meget forenklet, da du ikke bare kan sætte start og slutdato ind i en løkke, men det burde være en ledetråd
Avatar billede nielle Nybegynder
06. november 2007 - 20:10 #2
Måske noget i denne stil?

startDate = CDate("11/01/2007")
endDate = CDate("11/15/2007")

Dim(7) weekdayArr

betweenDate = startDate
While betweenDate <= endDate

    thisWeekday = Weekday(betweenDate, vbMonday])
    weekdayArr(thisWeekday) = weekdayArr(thisWeekday) + 1

    betweenDate = DateAdd("d", 1, betweenDate)

WEnd

For i=1 To 7
    Response.Write weekdayArr(thisWeekday) & " dage<br>"
Next



Referencet:

http://www.w3schools.com/vbscript/func_cdate.asp
http://www.w3schools.com/vbscript/func_weekday.asp
http://www.w3schools.com/vbscript/func_dateadd.asp
Avatar billede sorenmt84 Juniormester
06. november 2007 - 21:40 #3
Får denne fejl:
Microsoft VBScript compilation error '800a03f2'

Expected identifier

Dim(7) weekdayArr
---^
Avatar billede nielle Nybegynder
06. november 2007 - 21:53 #4
Min fejl:

Dim weekdayArr(7)
Avatar billede juhlemanden Nybegynder
11. november 2007 - 14:31 #5
Hvad med at gribe det an på en helt anden måde...

Det som nielle forslår virker super, men hvis det nu er en lang periode, der skal regnes over, skal man igennem while-løkken mange gange.
Valgte man i stedet at regne på det, er det underordnet hvor stor perioden er, dog kræver det lige mere kode, der er lidt svære at læse.


pseudo-koder
Træk datoerne fra hinanden, og del med syv. Heltalsdelen, er det antal som alle ugensdag er i perioden.
Så skal vi se om der er nogle der er der mere end en gang, vi ser så på den rest der er, og fortæller så hvor mange af ugens dage, som er der en gang mere end de andre.
Så hvis vi så spørger til, hvilke dag, som stardagen er, skal vi blot ligge en til antal gange den er der, og så tælle videre på dagene, det antal gang som resten siger.
Det ville være ideelt at putte ind i et array, hvor mandag eks er 0, Men det giver et problem, hvis vi skal gå fra søndag til mandag.
Det løser vi ved at, at hvis det sker, så ligger vi en til alle ugedagens antal, og så trækker vi istedet fra rest + ugedag - 7 til startugedagen - 1


Koden vil se således ud.
<%

Dim aWeekday(6)

startDate = "28-10-2007"
endDate = "15-11-2007"

Days = datediff("d",startDate,endDate) ' Skal endDate tælles med, skal der ligges en til.

allDays = int(Days / 7)

dayOfTheWeek = weekday(startDate,vbMonday) - 1 ' vi trækker en fra, da mandag = 0
additionalDays = Days mod 7

If additionalDays > 0 then ' hvis resten er nul, er der ikke mere at regne på
    If additionalDays + dayOfTheWeek > 6 then
        allDays = allDays + 1
       
        For i = dayOfTheWeek + additionalDays - 7 to dayOfTheWeek - 1
            aWeekday(i) = aWeekday(i) - 1
        next

    else
    Response.Write allDays & "<br>" & "<br>"
        For i = dayOfTheWeek to dayOfTheWeek + additionalDays - 1
            aWeekday(i) = aWeekday(i) + 1
        next
    end if
end if


' her sætter vil alle dagene i arrayet til at være det antal som alle dage har.
For i = 0 to 6
    aWeekday(i) = aWeekday(i)  + allDays
next


'udskriver
For i = 0 to 6
    Response.Write aWeekday(i) & "<br>"
next

%>



Håber det er til at forstå :)

/Juhlemanden
Avatar billede sorenmt84 Juniormester
13. november 2007 - 22:48 #6
beklager det sene svar...

>> juhlemanden

Jeg får denne fejl:
Microsoft VBScript runtime error '800a01f5'

Illegal assignment: 'I'
i denne linie:        For i = dayOfTheWeek + additionalDays - 7 to dayOfTheWeek - 1
Avatar billede sorenmt84 Juniormester
13. november 2007 - 22:51 #7
>> nielle

Som dit script er der, dog med den rettede dim, får jeg denne fejl:
Microsoft VBScript compilation error '800a0408'

Invalid character

/kommune/admin/medarbejdere/oversigt.asp, line 53

thisWeekday = Weekday(betweenDate, vbMonday])
-------------------------------------------^

Jeg kan ikke lige gennemskue hvad "]" er der for, så hvis jeg prøver at slette den, får jeg denne fejl:
Microsoft VBScript runtime error '800a01f5'

Illegal assignment: 'I'
I line: For i=1 To 7
Avatar billede nielle Nybegynder
13. november 2007 - 23:04 #8
]-tegnet var en *ups*.

Kan ikke lige se hvorfor den brokker sig over i'et, men det skal alligevel rettes fra:

For i=1 To 7
    Response.Write weekdayArr(thisWeekday) & " dage<br>"
Next

til:

For thisWeekday=1 To 7
    Response.Write weekdayArr(thisWeekday) & " dage<br>"
Next
Avatar billede sorenmt84 Juniormester
13. november 2007 - 23:25 #9
Super nu virker det...

Jeg bruger det til at sætte det ind i et database udtræk, så den skal tjkke dage op for en række poster, det virker fint på den første, men når den når til næste post, får jeg en fejl:
Microsoft VBScript runtime error '800a000d'

Type mismatch

Line: Dim weekdayArr(7)

Har du et bud på hvad det kan være?, evt at hele scriptet lige skal lukkes eller lign, indne jeg kan gå videre til næste post?
Avatar billede nielle Nybegynder
14. november 2007 - 07:22 #10
Din Dim skal *uden* for løkken - helst helt oppe i starten af koden. Den samme variabel kan nemlig ikke Dim'es flere gange i træk (jooo, men det er en anden snak og det koster performance).

Det betyder så at du også lige skal nulstille den inden for i løkken ellers bliver det hele lagt oven i det forrige.
Avatar billede sorenmt84 Juniormester
14. november 2007 - 15:38 #11
Mange tak... vil du smide et svar
Avatar billede sorenmt84 Juniormester
14. november 2007 - 16:46 #12
Lige en sidste ting ;-)

hvordan nulstiller jeg løkken? syntes jeg har prøvet alverdens kombinationer, men intet virker!
Avatar billede nielle Nybegynder
16. november 2007 - 20:12 #13
F.eks. sådan:

For thisWeekday=1 To 7
    weekdayArr(thisWeekday) = 0
Next
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