---
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"
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: 1
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 1 av 5._

## #1 — plelkes, 2003-06-04T08:15Z

Hej,
jag har snickrat ihop en kalender som skall i HTML-tabell visa aktuell månads dagar.
Nedanstående kod fungerade perfekt för maj-03 

```
<%@LANGUAGE=VBSCRIPT %>
<% Option Explicit %>
<HTML>
<BODY>
<%
Session.LCID = 1053
'Vi skapar en array med 42 element. 1:a elementet = 1:a cellen = 1:a Måndagen i månaden
'2:a elementet = 2:a cellen = 1:a Tisdagen i månaden
'osv
'Om vi placerar månadens dagar på de korrekta positionerna i arrayen, kan formaterad utskrift av kalendern 
'fås genom att loopa igenom arrayen.
'Exempel:
'om aktuella månadens första dag är en tisdag (= 3 i funktionen DatePart() ). Med andra ord så tilldelas 
'3:e elementet i vår arrey värdet 1. 4:e elementet i arreyen ( = onsdag i funktionen DatePart()) tilldelas värdet 2.
'Detta fortsätter så många gånger som det finns dagar i månaden.

Dim dagensdat  'för att få reda på det aktuella datumet
Dim iFirstDayMonth  'aktuella månadens första dag
Dim iDayMonth 'hur många dagar innehåller den aktuella månaden?
Dim aKalender(42) 'vi fyller arrKalenderDagar med aktuella månadens dagar
Dim iDag    'månadens dagar
Dim sWeekDayNamn
Dim Radbehov   'antalet rader som vår tabell behöver
Dim iVecka  'antalet rader vi har
Dim iVeckodag 'kolumnerna i tabellen

dagensdat = Date()
iFirstDayMonth = DatePart("w", DateSerial(Year(dagensdat), Month(dagensdat), 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 iDag = 1 to iDayMonth
    aKalender(iDag + iFirstDayMonth -2) = iDag  '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

'Nu när vi har vår array vill vi visa vår almanacka som en HTML-tabell med veckans dagar som kolumner
'och veckorna som rader.
'Antalet rader (Radbehov) som tabellen kommer att innehålla fås fram genom:
'från totala antalet celler subtrahera sista lementet i vår array.
Radbehov = 6 - INT((42 - (iFirstDayMonth + iDayMonth))/7)

'Nu när vi vet hur många rader vi behöver, skapar vi 2 loopar:
'Loop1 - itererar igenom antalet rader
'Lopp2 - lopar igenom kolumnerna, dvs. veckans dagar
 '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>"

'skapa ett nytt rad
For iVecka = 1 to Radbehov
Response.Write "<TR>"
For iVeckodag = 1 to 7
'skapa en ny cell
'om cellen är tom, så fyll cellen med svartfärg, annars visa dagen
If aKalender((iVecka-1)*7 + iVeckodag) > 0 then 'visa datumet
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender((iVecka-1)*7 + iVeckodag)
Response.Write "</FONT></CENTER></TD>"
Else 'fyll cellen med svart färg"
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write "&nbsp;" & "</TD>"
End If
Next
Response.Write "</TR>"
Next

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

 
**Men som ni ser**  [här](http://www31.brinkster.com/plelkesprojekt/BP1_1.asp)  kommer inte  **månadens första dag med** 

Detta ger upphov till följande frågor:
 

1. vilket/vilka fel har jag gjort?
2. varför fungerade det för maj-03?

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

## #2 — plelkes, 2003-06-04T09:30Z

Genom att ägna mig åt felsökning har jag kommit fram till att raderna innehåller fel

```
Radbehov = 6 - INT((42 - (iFirstDayMonth + iDayMonth))/7)
For iVecka = 1 to Radbehov
Response.Write "<TR>"
For iVeckodag = 1 to 7
'skapa en ny cell
'om cellen är tom, så fyll cellen med svartfärg, annars visa dagen
If aKalender((iVecka-1)*7 + iVeckodag) > 0 then 'visa datumet
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender((iVecka-1)*7 + iVeckodag)
```

Det grundar jag på:
 

- månadnes första dag är rätt
- antalet dagar i månaden är rätt
- MEN!! Radbehovet "beräknas" till 5, när det i verkligheten är 6

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

## #3 — Engine^, 2003-06-04T12:11Z

```
For iVecka = 0 To Radbehov
```

eller

```
Radbehov = 7 - INT((42 - (iFirstDayMonth + iDayMonth))/7)
```

Kan det vara ditt bekymmer?

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

## #4 — plelkes, 2003-06-04T12:38Z

Tyvärr EngineEngine^ ingen av dina förslag löser det\*suckochcnyft\*

```
For iVecka = 0 To Radbehov
```

  Ger fel-utskrift som du[ser](http://www31.brinkster.com/plelkesprojekt/BP1_2.asp) .
Och

```
Radbehov = 7 - INT((42 - (iFirstDayMonth + iDayMonth))/7)
```

 Lägger till [en tabell-rad](http://www31.brinkster.com/plelkesprojekt/BP1_3.asp) 
Och det jag vill åstadkomma är ju att månadens första dag - som i detta fall är en söndag - skall 1:an hamna på söndag i en rad mellan dag-raden och den raden som börjar med en 2:a

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

## #5 — Engine^, 2003-06-04T12:57Z

Kontrollera denna rad

```
iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, [b]1-1[/b])) [blue]'da´n innan första dagen i[/blue]
```

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

## #6 — plelkes, 2003-06-04T16:49Z

> Kontrollera denna rad
> kod:--------------------------------------------------------------------------------iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i--------------------------------------------------------------------------------

 ???
Är det ngt fel där?
i så fall vad?

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

## #7 — plelkes, 2003-06-04T21:24Z

Nu har jag försökt så hårt att huvudet ramlar i bitar\*snyft\*
Men fattar inte felet...
Kan inte hitta felet i 

```
iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1))
```

 heller..

```
Response.Write iDayMonth
```

 ger som det sig bör 30
och

```
Response.Wrie Month(dagensdat)+1
```

 
ger som det skall nämligen 7 som ju är juli

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

## #8 — plelkes, 2003-06-06T06:00Z

Snälla alla duktiga ASPare.... ngn som kan hjälpa mig??

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

## #9 — Macce, 2003-06-06T06:22Z

Byt ut raden:

```

iFirstDayMonth = DatePart("w", DateSerial(Year(dagensdat), Month(dagensdat), 1))
```

till

```
iFirstDayMonth = DatePart("w",DateSerial(Year(dagensdat),Month(dagensdat),1),vbMonday)
```

mvh

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

## #10 — plelkes, 2003-06-06T06:30Z

Tack för ditt tipps Macce, men inte heller det blir rätt..

Som  [Du/Ni ser](http://www31.brinkster.com/plelkesprojekt/BP1_3.asp) börjar månaden med en lördag, istället för på en söndag, och slutar på söndag istället för på en måndag

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

## #11 — Macce, 2003-06-06T06:31Z

då har du gjort nåt fel, medan jag kollade på din kod, testade den och det funkar...

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

## #12 — Macce, 2003-06-06T06:32Z

här

```
<%
Session.LCID = 1053

Dim dagensdat  'för att få reda på det aktuella datumet
Dim iFirstDayMonth  'aktuella månadens första dag
Dim iDayMonth 'hur många dagar innehåller den aktuella månaden?
Dim aKalender(42) 'vi fyller arrKalenderDagar med aktuella månadens dagar
Dim iDag    'månadens dagar
Dim sWeekDayNamn
Dim Radbehov   'antalet rader som vår tabell behöver
Dim iVecka  'antalet rader vi har
Dim iVeckodag 'kolumnerna i tabellen

dagensdat = Date()
iFirstDayMonth = DatePart("w",DateSerial(Year(dagensdat),Month(dagensdat),1),vbMonday)
iDayMonth  = DatePart("d", DateSerial(Year(dagensdat), Month(dagensdat)+1, 1-1)) 'da´n innan första dagen i 

For iDag = 1 to iDayMonth
    aKalender(iDag + iFirstDayMonth -2) = iDag 
Next

Radbehov = 6 - Round((42-(iFirstDayMonth+iDayMonth))/7)

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

   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>"

'skapa ett nytt rad
For iVecka = 1 to Radbehov
Response.Write "<TR>"
For iVeckodag = 1 to 7
'skapa en ny cell
'om cellen är tom, så fyll cellen med svartfärg, annars visa dagen
If aKalender((iVecka-1)*7 + iVeckodag) > 0 then 'visa datumet
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender((iVecka-1)*7 + iVeckodag)
Response.Write "</FONT></CENTER></TD>"
Else 'fyll cellen med svart färg"
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write " " & "</TD>"
End If
Next
Response.Write "</TR>"
Next

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

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

## #13 — Macce, 2003-06-06T06:33Z

med 

Round((42-(iFirstDayMonth+iDayMonth))/7)

istället för Int-slipper du den svarta sista raden...

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

## #14 — plelkes, 2003-06-06T06:39Z

Mycket mystiskt att du har fått det hela att funger...

Jag har klippt och klistrat - men får det hela INTE att fungera
[så här blir det ändå](http://www31.brinkster.com/plelkesprojekt/kalender2.asp)

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

## #15 — Macce, 2003-06-06T12:22Z

Tycker det ser bra ut !

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

## #16 — Engine^, 2003-06-06T13:11Z

Det verkar vara så att du använder dig av fel index i din aKalender(), när du kör *aKalender((iVecka - 1) \* 7 + iVeckodag)*. Har du kontrollerat vad som sker om du skippar - 1?

iFirstDayMonth och iDayMonth är ju helt riktiga, så det borde fungera...

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

## #17 — plelkes, 2003-06-07T16:17Z

Jag får inte till det hela ngn som kan hjälpa mig please??
Jag har fyllt min array - och det funkar som [ni ser här](http://www31.brinkster.com/plelkesprojekt/test.asp) 
Nu vill jag:

1. presentera arrayen i form av en tabell [se nedan på sidan](http://www31.brinkster.com/plelkesprojekt/test.asp)
2. Med början i rätt ruta - dvs om månadnes första dag är en söndag, så skall det stå 1 i rutan för söndag i vecka 1 (iDag = 1)
3. fylla på så länge som det finns antal dagar i aktuell månad -nästa ruta 2 (iDag = 2), nästa 3 (iDag = 3) osv..
4. om rutan inte innehåller dag - så fyll rutan med svart färg

 
Snälla hjälp mig innan jag blir galen

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

## #18 — plelkes, 2003-06-10T14:40Z

Snälla experter här i forumet - ngn av Er som kan visa mig ljuset, dvs visa en lösning??

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

## #19 — plelkes, 2003-06-10T19:15Z

Hej blir bara konstigare och konstigare...
Med nedanstående kod:

```
<%@ Language = VBSCRIPT %>
<% Option Explicit %>

<HTML>
<BODY>

<%

   'Next, we need to obtain the current
   'date.  To do this, we will store the result of the
   'Date() function into a variable named dbCurrentDate
   Dim dbCurrentDate
   dbCurrentDate = "4/1/2003"

   'Now, we need to display a calendar.  At most, a calendar
   'can have six weeks.  Since a week contains seven days,
   'we will show, at most, 42 calendar cells.  We will use
   'a TABLE to generate this calendar

   'We will create an array that will store the 42 possible
   'days of the month.
   Dim aCalendarDays(42)

   'Into aCalendarDays, we will place the days of the current
   'month.  We will use the DatePart function to determine
   'when the first day of the month is
   Dim iFirstWeekday
   iFirstWeekday = DatePart("w",DateSerial(Year(dbCurrentDate), Month(dbCurrentDate), 1))

   'Now, we want to loop from 1 to the number of days in the
   'current month, populating the array aCalendarDays
   'Loopen gör ju att värdet: ( iLoop + iFirstWeekday - 1) ändras för varje varv 
   'loopen gör (iLoop räknas ju upp ett snäpp). Då blir det ju som så att först får då 
   'aCalendarDays(4) sitt värde, nästa varv får aCalendarDays(5) sitt värde osv. 
    'iLoop är ju själva räknaren som räknar upp, startar på 1, därav dras det sen bort -1
	'alternativet borde ju kunna vara att börja räkna från 0 i stället. 
    'iFirstWeekday är ju med för att den inte ska börja räkna på första dagen i veckan, utan 
	'första dagen i månaden.
	'iLoop = antalet dagar i aktuella månaden

   Dim iDaysInMonth
   iDaysInMonth = DatePart("d",DateSerial(Year(dbCurrentDate), Month(dbCurrentDate)+1, 1-1))
   Dim iLoop
   For iLoop = 1 to iDaysInMonth
      aCalendarDays(iLoop + iFirstWeekday - 2) = iLoop
   Next

   'Now that we have our populated array, we need to display the
   'array in calendar form.  We will create a table of 7 columns,
   'one for each day of the week.  The number of rows we will use
   'will be 6, the total number of possible rows, minus 42 (the upper 
   'bound of the aCalendarDays array) minus the last array position
   'used (iFirstWeekday + iDaysInMonth) divided by seven, the number of
   'days in the week!  Simple, eh!!  :)
   Dim iColumns, iRows
   iColumns = 7
   iRows = 6 - Int((42 - (iFirstWeekDay + iDaysInMonth)) / 7)
   '(iFirstWeekDay + iDaysInMonth) = totala antalet celler som behövs

   'Now, create the table
%>

   <TABLE ALIGN=CENTER BORDER=1 CELLSPACING=1 WIDTH=75% HEIGHT=75%>
     <TH COLSPAN=7>
        <FONT SIZE=+2>
<%
   'Display the month and year
   Response.Write GetMonthName(Month(dbCurrentDate))
   Response.Write ", " & Year(dbCurrentDate)
%>
        </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>"
  
   'Now, loop through 1 through iRows, then 1 through iColumns
   Dim iRowsLoop, iColumnsLoop
   For iRowsLoop = 1 to 6
     'Create a new row
     Response.Write "<TR>"
     For iColumnsLoop = 1 to 7
       'Create a new column
       'If there is a day there, display it, else black out the cell
       If aCalendarDays((iRowsLoop-1)*7 + iColumnsLoop)="" then
         'Black out the cell
         Response.Write "<TD BGCOLOR=BLACK>&nbsp;</TD>"
       Else
        'Display the date
         Response.Write "<TD VALIGN=TOP ALIGN=RIGHT WIDTH=""14%"">"
         Response.Write aCalendarDays((iRowsLoop-1)*7 + iColumnsLoop)
         Response.Write "</TD>"
       End If
     Next

     'Close the row
     Response.Write "</TR>"
   Next
%>

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

 
Så fungerar det för:
[april03](http://www31.brinkster.com/plelkesprojekt/april.asp) 
[juli-03](http://www31.brinkster.com/plelkesprojekt/juli03.asp) 
[januari-02](http://www31.brinkster.com/plelkesprojekt/juan02.asp) Men när jag kör för innevarande månad så blir det konstig. Som [ni ser](http://www31.brinkster.com/plelkesprojekt/juni03.asp)  får jag inte med månadens första dag alls - som ju är en söndag .

Händer bara just juni -03 av alla de månader jag har provat!!

**\[3\]Kan ngn av ER på detta forum please förklara varför?**

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

## #20 — plelkes, 2003-06-11T17:14Z

***Snälla forumet:
Finns det ngn som kan lösa ovanstående mysterium för mig???????***

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

---

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