---
title: "Kalendern vill inte börja med första dagen i månden"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/78853-kalendern-vill-inte-börja-med-första-dagen-i-månden/page3"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "plelkes"
published: "2003-06-04T08:15:35.000Z"
updated: "2003-07-03T14:28:33.000Z"
replies: 86
views: 1722
page: 3
pages: 5
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/78853-kalendern-vill-inte-börja-med-första-dagen-i-månden"
---

# Kalendern vill inte börja med första dagen i månden

_Sida 3 av 5._

## #41 — plelkes, 2003-06-12T11:14Z

Engine, jag skämms men fattar ändå mindre\*snyft\*

- varför är måndag arrayens första dag - (för det är ju den om arr(0)=måndag

 

```
intFirstDayIndex = WeekDay("2003-06-01", 2)
```

 utgår du i denna kod oxå från att måndag är arrayens första dag?

> intFirstDayIndex = WeekDay("2003-06-01", 2) - 1 (= 6) 
> 
> Denna månads första dag är alltså en söndag. 2 = vbMonday. 
> 
> I loopen ska alltså datum 1 sättas in i arrayen på index 6.

 Hur kommer det sig att det blir en 6:a och inte -1

Permalänk: https://www.webforum.nu/p/1081671

## #42 — plelkes, 2003-06-12T20:37Z

snälla  Engine^ ,
väntar med förväntan på ditt svar

Permalänk: https://www.webforum.nu/p/1082035

## #43 — plelkes, 2003-06-13T12:47Z

Det verkar vara omöjligt att få kontakt med Engine\*suck\*
Kan ngna annan kanske förklar hur han tänkte?

> Loopen placerar ut datumen på "rätt plats" i Arrayen. 
> Eftersom a_intKalender går från 0 till 41, så startar jag helt enkelt på (veckodagsnumret för den första den sökta månaden) - 1. -1 så att inte indexet blir galet.

 
Här fattar jag ändå tills

> på (veckodagsnumret för den första den sökta månaden) - 1. -1 så att inte indexet blir galet.

 Varför just "-1"?

```
intFirstDayIndex = WeekDay("2003-06-01", 2) - 1 (= 6)
```

 
Jag fattar att 2=vbMonday.. Men är den med för att jag vill att veckan skall starta på en måndag?
hur kommer man fram till att = 6? 1:a dagen är på 0:e plats i arrayen. då borde det bli -1??

Permalänk: https://www.webforum.nu/p/1082432

## #44 — solbulle, 2003-06-13T17:45Z

Med koden:
WeekDay("2003-06-01", 2)

Vill du ju få fram vilken veckodag det är den aktuella veckan.
2:an säger ju att veckans första dag är måndag, mao är måndag = 0.
Eftersom att 1/6-2003 är en söndag, får den numret 7.(Dag 7 i veckan)
Drar du bort 1 från 7 så har du 6 kvar.
Klart som korvspad. ;)

Tror jag...

Permalänk: https://www.webforum.nu/p/1082588

## #45 — plelkes, 2003-06-13T18:13Z

Men är den koden allmängilltig, dvs kan användas för all månader?

Permalänk: https://www.webforum.nu/p/1082597

## #46 — solbulle, 2003-06-13T20:08Z

Det tycker jag banne mig att den ska vara. Du kan kika på MSDN:
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctweekday.asp>

Permalänk: https://www.webforum.nu/p/1082644

## #47 — plelkes, 2003-06-14T08:53Z

Ok,
nu har jag äntligen fattat konstruktionen med WeekDay()
Men i aktiella fallet har Engine lagt till "-1" dvs

```
WeekDay()-1
```

 Och ni har förklarat med att -1 behövs för att aktuell månad börjar med söndag...
Då har jag följande frågor

1. hur kan då koden vara allmängiltig? Alla månader börjar väl inte med söndag

Permalänk: https://www.webforum.nu/p/1082781

## #48 — Engine^, 2003-06-14T16:26Z

Hmm... förlåt min frånvaro ;)

WeekDay returnerar vilken dag i veckan datumet du skickar in till funktionen motsvarar. WeekDay("2003-06-14", 2) - 1 returnerar fem, eftersom 1 = Måndag, 2 = Tisdag, ..., 6 = Lördag. Utan -1 skulle resultatet bli 6 och arrayen skulle förskjutas med ett steg "åt höger".  Nu är det förvisso inte nödvändigt att använda -1 utan det går även att ändra loopen från 0 - 41 till 1 - 42.

Svar 1: Alla månader börjar med den första... WeekDay() returnerar alltså vilken dag i veckan som är månadens första dag.

Nu ser jag då jag läser igenom att jag inte skriver vad jag riktigt menar ibland och det kan jag tänka mig försvåra för dig en del :) Men men... fråga på du så kommer det i sinom tid ett helt korrekt svar ;)

Permalänk: https://www.webforum.nu/p/1083012

## #49 — plelkes, 2003-06-23T13:15Z

Tillbaka från brölloppsresan, så gav jag mig i kast med mitt projekt igen...

Jag provade använda mig av de tipps som jag fick från Engine^ :birp , försökte midifiera lite till nedanstående 

```
<%@LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<TITLE>wf</TITLE>
</HEAD>

<BODY>
<%
Session.LCID = 1053
Dim intFirstDayIndex, dagensdat, iDayMonth, iDag, aKalender(42)
dagensdat = Date()
intFirstDayIndex = WeekDay(dagensdat, 2) - 1
iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i 

'Får att fylla vår array (som ju heter aKalender) behöver vi en loop från dag 1 i aktuell månad till
'sista dagen i aktuell månad
'Loopen kommer att snurra lika många varv som det finns dagar i månaden
For i = intFirstDayIndex to iDayMonth
    aKalender(i) = iDag
	iDag = iDag + 1  'för att förtydliga formeln: iDag = räknaren iFirstdayMonth är med för att det skall börja räkna från första dagen i månaden.

Next

  'låt oss skapa tabellen
%><TABLE ALIGN=CENTER BORDER=1 CELLSPACING=1 WIDTH=75% HEIGHT=75%> 
<TH COLSPAN=7> <FONT SIZE=+2> 
  <%
 'visa aktuell månad och år
   Response.Write MonthName(Month(dagensdat))
   Response.Write ", " & Year(dagensdat)
%>
  </FONT> </TH>
<%
Response.Write "<TR><TD><CENTER><B>"
  Response.Write "Måndag"  
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Tisdag"
  Response.Write "</B></CENTER></TD> <TD><CENTER><B>"
  Response.Write "Onsdag" 
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Torsdag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Fredag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Lördag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Söndag"
  Response.Write "</B></CENTER></TD></TR>"
For i = 0 to 41
If i mod 7 = 0 Then Response.Write "<TR>"
If aKalender(i) = "" Then
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write "&nbsp;" & "</TD>"
Else
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i)
Response.Write "</FONT></CENTER></TD>"
End If
Next
If i mod 6 = 0 And i <> 0 Then 
Response.Write "</TR>"
End If

%>

</TABLE>
</BODY>
</HTML>
```

 Men [som ni ser](http://www31.brinkster.com/plelkesprojekt/wf.asp)  blev ju inte resultatet bra alls.. Följande fel blev resultatet:

- månaden börjar på en tisdag
- månaden slutar på onsdag

Permalänk: https://www.webforum.nu/p/1091262

## #50 — solbulle, 2003-06-23T15:55Z

iDag ska väl vara lika med 1 innan du börjar loopa.
Du måste väl utgå från den första i månaden för att det ska bli rätt med veckorna/datumen och inte med Date() ?

Sen när du fyller din array måste du väl göra typ som Engine gör, annars blir ju arrayen inte tillräkligt "lång":

```
intLastDayIndex = IntFirstDayIndex - 1 + DatePart("d", (DateAdd("m", 1, dteCurrentDate)))

' div kod...

For i = intFirstDayIndex to intLastDayIndex 
'osv
```

Permalänk: https://www.webforum.nu/p/1091390

## #51 — plelkes, 2003-06-23T19:03Z

**Nu fick jag för mina "synder". Skall aldrig mera göra avkall från min princip att för att kunna lära mig ngt, så måste jag förstå:r** 

> iDag ska väl vara lika med 1 innan du börjar loopa.

 
varför det??

```
intLastDayIndex = IntFirstDayIndex - 1 + DatePart("d", (DateAdd("m", 1, dteCurrentDate)))
```

Jag förstår inte denna konstruktion. Om jag tillämpar på aktuell månad blir det som nedan:

```
 Session.LCID = 1053
 intFirstDayIndex = WeekDay("2003-06-01", 2) - 1
 intLastDayIndex = IntFirstDayIndex - 1 + DatePart("d", (DateAdd("m", 1, "2003-06-01") - 1))
```

Så får jag intLastDayIndex = 35

```
DateAdd("m", 1, "2003-06-01") – 1
```

ger som sig bör

> you can use DateAdd to calculate a date 30 days from today

aktuell månads sista datum.

```
 DatePart("d", DateAdd("m", 1, "2003-06-01") - 1 )
```

ger antalet dagar som aktuell månad har. I vårt fall 30

```
 IntFirstDayIndex – 1
```

ger en 5:a = lördag som stämmer överens med föregående månads sista dagsindex

Sammantaget ger detta att 

```
 For i = intFirstDayIndex to intLastDayIndex
```

kan översättas som 

```
For i = 6 to 35
```

 Och allt detta stämmer ju kanon fint..
M E N ***hur i hela fridens namn har Engine kommit fram till detta?????***

Permalänk: https://www.webforum.nu/p/1091480

## #52 — OveRRidE, 2003-06-23T19:11Z

Varför allt detta skrikande? Lugna ner oss ett par gram, tack. 

MVH
OveRRidE

moderator, webForum

Permalänk: https://www.webforum.nu/p/1091482

## #53 — plelkes, 2003-06-23T19:13Z

skrikande?
ber omursäkt, var absolut nte min mening :r

Permalänk: https://www.webforum.nu/p/1091485

## #54 — plelkes, 2003-06-23T19:15Z

Förresten ytterligar en konstruktion som jag skulle behöva förstå är 

> mod är samma som division med rest: 7 mod 6 = 1, 7 mod 7 = 0... modul operation

```
For i = 0 To 41
  If i mod 7 = 0 Then strHTML = strHTML & "<tr>"
```

Betyder väl att om I = 7, 17, 21, 28, eller 35 då skrivs strHTML = strHTML & "\<tr\>"
Stämmer detta?

Permalänk: https://www.webforum.nu/p/1091486

## #55 — solbulle, 2003-06-23T21:22Z

På sista frågan svarar jag: ja.
Det stämmer väl va? Den ska ju byta rad efter sju dagar.

Hela tekninken med denna almanacka som jag ser det är att den utgår från en matta med 42 fält.
Frågan är alltså dels hur många fält som ska markeras samt vilken dag det ska börja markeras på.
Antalet får du ju reda på genom att kolla hur många dagar den aktuella månaden innehåller.
Vilken veckodag som är den första får du ju reda på genom WeekDay-funktionen.

Sen kollar du ju lätt hur många tomma rutor som ska skrivas innan du loppar ut de riktiga dagarna.

```
<%@LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<TITLE>wf</TITLE>
</HEAD>

<BODY>
<%
Session.LCID = 1053
Dim intFirstDayIndex, dagensdat, iDayMonth, iDag, aKalender(42)
dagensdat = "2003-06-01"

intFirstDayIndex = WeekDay(dagensdat, 2) - 1
iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 0)) 'da´n innan första dagen i 
intLastDayIndex = intFirstDayIndex  + iDayMonth - 1

'Första veckodagens placering, -1 = Antal tomma rutor/dagar innan utskrivning av eg. dagar.
'Antalet dagar i månaden
'Sista dagens placering i månaden. Tar -1 här för att jämka med intFirstDayIndex.

iDag = 1
For i = intFirstDayIndex to intLastDayIndex 

    aKalender(i) = iDag
	iDag = iDag + 1

Next

  'låt oss skapa tabellen

  Response.Write "<TABLE ALIGN=CENTER BORDER=1 CELLSPACING=1 WIDTH=75% HEIGHT=75% >"
  Response.Write "<TH COLSPAN=7> <FONT SIZE=+2>"

 'visa aktuell månad och år
   Response.Write MonthName(Month(dagensdat))
   Response.Write ", " & Year(dagensdat)

  Response.Write "</FONT> </TH>"
  Response.Write "<TR><TD><CENTER><B>"
  Response.Write "Måndag"  
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Tisdag"
  Response.Write "</B></CENTER></TD> <TD><CENTER><B>"
  Response.Write "Onsdag" 
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Torsdag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Fredag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Lördag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Söndag"
  Response.Write "</B></CENTER></TD></TR>"

For i = 0 to 41
If i mod 7 = 0 Then Response.Write "<TR>"
If aKalender(i) < 1 Then
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write " _" & "</TD>"
Else
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & " " 
Response.Write "</FONT></CENTER></TD>"
End If
Next

If i mod 6 = 0 And i <> 0 Then 
Response.Write "</TR>"
End If

Response.Write "</TABLE></BODY></HTML>"
%>
```

Permalänk: https://www.webforum.nu/p/1091533

## #56 — plelkes, 2003-06-24T07:16Z

Tack för det :birp .. Äntligen tror jag att jag har  fattad det hela

> Hela tekninken med denna almanacka som jag ser det är att den utgår från en matta med 42 fält. 
> Frågan är alltså dels hur många fält som ska markeras samt vilken dag det ska börja markeras på.

 Detta var/är mitt syfte redan från bröjan.
Nu skall vi se om jag fattat rätt:

```
intLastDayIndex = intFirstDayIndex  + iDayMonth - 1
```

 För att få rätt i array, så måste jag starta från första dagen och addera antalet dagar i månaden

```
If i mod 7 = 0 Then Response.Write "<TR>"
```

 Eftersom raderna går 0 -\>6, 7 -\>13, 14 -\>20 osv så börha en ny tabellrad för varje gång i/7 = 0, dvs 0, 7, 14, 21, 28, 35

Permalänk: https://www.webforum.nu/p/1091642

## #57 — Engine^, 2003-06-24T07:35Z

En almanacka är skoj, eller hur?

Jag gjorde en ny lösning (som förvisso är i C#, men men), som jag kan skicka dig koden till (Den **fanns** för allmän åskådan på min testsida <http://engine.servehttp.com>).

**red.** Min sida är förändrad, så kalendern finns inte att se längre

Permalänk: https://www.webforum.nu/p/1091647

## #58 — plelkes, 2003-06-24T09:39Z

Nu har jag gjort ytterligare modifieringar, bla att man kan välja månad och år själv.

```
<%@LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<TITLE>wf</TITLE>
</HEAD>

<BODY>
<%
Session.LCID = 1053

Dim intFirstDayIndex, dagensdat, iDayMonth, iDag, aKalender(42), strDate, dteDate

strDate = Request.Form("year") & "-" & Request.Form("month") & "-01"
dteDate = CDate(strDate)

intFirstDayIndex = WeekDay(dteDate, 2) - 1  
iDayMonth  = DatePart("d", DateSerial(Year(Request.Form("year")), Month(Request.Form("month"))+1, 0)) 

intLastDayIndex = intFirstDayIndex  + iDayMonth - 1 
iDag = 1
For i = intFirstDayIndex to intLastDayIndex 

    aKalender(i) = iDag
	iDag = iDag + 1

Next

Response.Write "<TABLE ALIGN=CENTER BORDER=1 CELLSPACING=1 WIDTH=75% HEIGHT=75% >"
Response.Write "<TH COLSPAN=7> <FONT SIZE=+2>"

   Response.Write MonthName(Month(dteDate))
   Response.Write ", " & Year(dteDate)

  Response.Write "</FONT> </TH>"
  Response.Write "<TR><TD><CENTER><B>"
  Response.Write "Måndag"  
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Tisdag"
  Response.Write "</B></CENTER></TD> <TD><CENTER><B>"
  Response.Write "Onsdag" 
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Torsdag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Fredag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Lördag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Söndag"
  Response.Write "</B></CENTER></TD></TR>"
For i = 0 to 41
If i mod 7 = 0 Then Response.Write "<TR>"  

If aKalender(i) < 1 Then
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write " _" & "</TD>"
Else
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & " " 
Response.Write "</FONT></CENTER></TD>"
End If
Next

If i mod 6 = 0 And i <> 0 Then 
Response.Write "</TR>"
End If

Response.Write "</TABLE></BODY></HTML>"
%>
```

 
Har bara hunnit testa med ngra månader, men funnit redan att

1. blir fel dvs månaden slutar på måndagen 31:a för juni-02
2. för januari-90 så blir det 1 st extra tabellrad - kan jag bli av med denna rad på ngt sätt?

 
En så länge har jag formuläret där år och månad[väljes](http://www31.brinkster.com/plelkesprojekt/list.html) på en egen sida

Permalänk: https://www.webforum.nu/p/1091703

## #59 — plelkes, 2003-06-26T19:47Z

Får följande fle utskrift:

> Microsoft VBScript runtime error '800a000d' 
> 
> Type mismatch: 'CDate' 
> 
> /plelkesprojekt/test_list.asp, line 35

 Rad 33 - 35 ser ut som följer:

```
Dim intFirstDayIndex, dagensdat, iDayMonth, iDag, aKalender(42), strDate, dteDate

strDate = Request.Form("year") & "-" & Request.Form("month") & "-01"
dteDate = CDate(strDate)
```

Permalänk: https://www.webforum.nu/p/1096424

## #60 — plelkes, 2003-06-26T19:53Z

Snälla, kan ngn av Er gurus berätta vilket fel koden  har?

```
<%@LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<TITLE>wf</TITLE>
</HEAD>

<BODY>
<%
Session.LCID = 1053

Dim intFirstDayIndex, dagensdat, iDayMonth, iDag, aKalender(42), strDate, dteDate

strDate = Request.Form("year") & "-" & Request.Form("month") & "-01"
dteDate = CDate(strDate)

intFirstDayIndex = WeekDay(dteDate, 2) - 1  
iDayMonth  = DatePart("d", DateSerial(Year(Request.Form("year")), Month(Request.Form("month"))+1, 0)) 

intLastDayIndex = intFirstDayIndex  + iDayMonth - 1 
iDag = 1
For i = intFirstDayIndex to intLastDayIndex 

    aKalender(i) = iDag
	iDag = iDag + 1

Next

Response.Write "<TABLE ALIGN=CENTER BORDER=1 CELLSPACING=1 WIDTH=75% HEIGHT=75% >"
Response.Write "<TH COLSPAN=7> <FONT SIZE=+2>"

   Response.Write MonthName(Month(dteDate))
   Response.Write ", " & Year(dteDate)

  Response.Write "</FONT> </TH>"
  Response.Write "<TR><TD><CENTER><B>"
  Response.Write "Måndag"  
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Tisdag"
  Response.Write "</B></CENTER></TD> <TD><CENTER><B>"
  Response.Write "Onsdag" 
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Torsdag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Fredag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Lördag"
  Response.Write "</B></CENTER></TD><TD><CENTER><B>"
  Response.Write "Söndag"
  Response.Write "</B></CENTER></TD></TR>"
For i = 0 to 41
If i mod 7 = 0 Then Response.Write "<TR>"  

If aKalender(i) < 1 Then
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write " _" & "</TD>"
Else
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & " " 
Response.Write "</FONT></CENTER></TD>"
End If
Next

If i mod 6 = 0 And i <> 0 Then 
Response.Write "</TR>"
End If

Response.Write "</TABLE></BODY></HTML>"
%>
```

 

Alla månader får 31 dagar, även februari. Månaderna börjar på rätt dag, men slutar på dag 31 :q 
SNÄLLA hjälp mig please

Permalänk: https://www.webforum.nu/p/1096427

---

Tråden på webben: https://www.webforum.nu/amne/asp/78853-kalendern-vill-inte-börja-med-första-dagen-i-månden/page3  
Föregående sida: https://www.webforum.nu/amne/asp/78853-kalendern-vill-inte-börja-med-första-dagen-i-månden/page2.md  
Nästa sida: https://www.webforum.nu/amne/asp/78853-kalendern-vill-inte-börja-med-första-dagen-i-månden/page4.md
