06. november 2007 - 13:06Der 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.
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
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?
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.
For thisWeekday=1 To 7 weekdayArr(thisWeekday) = 0 Next
Synes godt om
Ny brugerNybegynder
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.