---
title: "Kalender, skriva ut föregående månads sista dagar."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/157892-kalender-skriva-ut-föregående-månads-sista-dagar"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "MickeA.com"
published: "2007-03-05T18:38:05.000Z"
updated: "2007-03-07T19:50:22.000Z"
replies: 9
views: 716
page: 1
pages: 1
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/157892-kalender-skriva-ut-föregående-månads-sista-dagar"
---

# Kalender, skriva ut föregående månads sista dagar.

## #1 — MickeA.com, 2007-03-05T18:38Z

Tjena
Håller på med en kalender som visar aktuell månad.
Det funkar nu så långt att alla "denna månads" dagar visas schysst.

Eftersom varje månad (i princip) börjar / slutar mitt i en vecka (som i Torsdags när det var den 1'a Mars, så skulle jag vilja skriva ut även de sista dagarna i föregående månad (i nuläget Måndag den 26'e, Tisdag den 27'e samt Onsdag den 28'e).

Som det är nu så skrivs bara tomma rutor ut, eftersom jag inte får till det här med dagarna i förra / nästa månad.

Såhär har jag gjort:

```
datumet = date()

sAr = DatePart("yyyy", datumet)
sMan = DatePart("m", datumet)
sDay = DatePart("d", datumet)
%>
	<p class="dayname asweek">Vecka</p>
	<p class="dayname asweek">Måndag</p>
	<p class="dayname asweek">Tisdag</p>
	<p class="dayname asweek">Onsdag</p>
	<p class="dayname asweek">Torsdag</p>
	<p class="dayname asweek">Fredag</p>
	<p class="dayname asweek">Lördag</p>
	<p class="dayname asweek">Söndag</p>
	<div style="clear: both;"></div>
<%
If InStr(sMan, "0") And sMan < 10 Then
	sMan = Right(sMan, 1)
End If

dtmFirstDay = DateSerial(Year(datumet), sMan, 1)
dtmLastDay = DateAdd("d", -1, DateAdd("m", 1, DateSerial(Year(datumet), sMan, 1)))
Response.Write("<p class=""weekday asweek"">" & DatePart("ww", dtmFirstDay, 2, 2) & "</p>" & vbCrLf)
[red]
If Weekday(dtmFirstDay, 2) > 1 Then
	For j = 1 To Weekday(dtmFirstDay, 2) - 1
		Response.Write("<p class=""weekday"">" & [b]Day(dtm - j)[/b] & "</p>" & vbCrLf)
		intCount = intCount + 1
	Next
End If
[/red]
For dtm = dtmFirstDay To dtmLastDay
	If intCount Mod 7 = 0 AND intCount > 0 Then
		Response.Write("<p class=""weekday asweek"">" & DatePart("ww", dtm, 2, 2) & "</p>" & vbCrLf)
	End If

	Response.Write("<p class=""weekday"">" & Day(dtm) & "</p>" & vbCrLf)
	intCount = intCount + 1
Next
[red]
If intCount Mod 7 > 0 Then
	For j = 7 To (intCount Mod 7) + 1 Step - 1
		Response.Write(" <p class=""weekday"">&nbsp;</p>" & vbCrLf)
	Next
End If
[/red]
intCount = 0
```

Det första rödfärgade stycket är de dagar som finns \_innan\_ aktuell månad skrivs ut, det fetstilta är ett tappert försök att skriva ut dagarna, men det som står nu skriver ut fel (det skriver ut 29, 28, 27 vilket både är fel dagar och i fel ordning).
Det sista rödfärgade stycket är de dagar som kommer först i "nästa" månad.

Det jag vill göra är alltså att skriva ut de dagar som "inte" tillhör nuvarande månad.

Tack på förhand!

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

## #2 — doggelito, 2007-03-05T20:41Z

Det du gör är att inte loopa endast aktuell månad utan du loopar datumet för första dagen i den första veckan i aktuell månad till sista dagen i sista veckan i aktuell månad.
Hängde du med?! :)

Du kan ta hjälp av dessa funktioner:

```
'Hämtar första dagen i vald vecka =========================================
Public Function getFirstweekday(ByVal Current_date)
    If Len(Current_date) = 0 Or Not isDate(Current_date) Then Exit Function
	getFirstweekday = Current_date - weekday(Current_date, 2)+1
End Function

'Hämtar sista dagen i vald vecka ==========================================
Public Function getLastweekday(ByVal Current_date)
    If Len(Current_date) = 0 Or Not isDate(Current_date) Then Exit Function
	getLastweekday = Dateadd("D", (7 - weekday(Current_date, 2)), Current_date)
End Function

'Hämtar första dagen i vald månad =========================================
Public Function getFirstmonthday(ByVal Current_date)
    If Len(Current_date) = 0 Or Not isDate(Current_date) Then Exit Function
	getFirstmonthday = Dateserial(Year(Current_date), Month(Current_date), 1)
End Function

'Hämtar sista dagen i vald månad ==========================================
Public Function getLastmonthday(ByVal Current_date)
    If Len(Current_date) = 0 Or Not isDate(Current_date) Then Exit Function
	getLastmonthday = Dateserial(Year(Current_date), Month(Current_date)+1, 1-1)
End Function
```

För att hitta startdatum och slutdatum för loopen:

```
dtmFirstDay = getFirstweekday(Date())
dtmLastDay = getLastweekday(getLastmonthday(Date()))

For dtm = dtmFirstDay To dtmLastDay
...
Next
```

Sen behöver du bara lista ut hur du färgmarkerar de olika dagarna! :)

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

## #3 — MickeA.com, 2007-03-06T15:48Z

Hmm, är inte riktigt med.
Bifogar en bild på hur koden ovan skriver ut saker och ting.
Första / sista dag i vald månad har jag ju redan, det är de sista dagarna ur månaden innan jag vill få ut.
Som det framgår på bifogad bild så skrivs 29, 28, 27 ut på rutorna högst upp till vänster, eftersom den första Mars var i Torsdags.
Det som ska skrivas ut i det här fallet är 26, 27, 28 så på något sätt måste loopen skivas ut åt andra hållet, samt att den måste ta hänsyn till eventuellt skottår.

Det är alltså i de två kodstyckena högst upp samt längst ner (de rödfärgade) som något ska ändras i.

Frågan är bara vad?
Tack!

Bilagor:

- [planit_dump.jpg](https://www.webforum.nu/a/13909.jpg)

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

## #4 — MickeA.com, 2007-03-06T16:04Z

> **doggelito skrev:**
>
> ```
> dtmFirstDay = getFirstweekday(Date())
> dtmLastDay = getLastweekday(getLastmonthday(Date()))
> 
> For dtm = dtmFirstDay To dtmLastDay
> ...
> Next
> ```

När jag kör din kod rakt av, så får jag:

```
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer: 'getFirstweekday'
/****/index.asp, line 102
```

Rad 102 är alltså **dtmFirstDay = getFirstweekday(Date())**

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

## #5 — doggelito, 2007-03-07T07:33Z

> **MickeA.com skrev:**
>
> Det är alltså i de två kodstyckena högst upp samt längst ner (de rödfärgade) som något ska ändras i

Jag förstår precis vad du är ute efter. :)
Det jag var inne på var att du krånglar till det en aning.
Som du kodat så behöver du 3 loopar, en för föreg. månad, en för aktuell månad och en för nästa. Du kan slå ihop alla till en loop.

> **MickeA.com skrev:**
>
> När jag kör din kod rakt av, så får jag:
> Kod:
> 
> Körningsfel i Microsoft VBScript (0x800A000D)
> Inkompatibla typer: 'getFirstweekday'
> /\*\*\*\*/index.asp, line 102
> 
> 
> Rad 102 är alltså dtmFirstDay = getFirstweekday(Date())

Det är inge fel på funktionerna, du måste ha inkluderat dem på nått konstigt ställe.
Funktionerna kan du inkludera överst eller underst eller var du vill ha dem.

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

## #6 — MickeA.com, 2007-03-07T14:55Z

> **doggelito skrev:**
>
> Det är inge fel på funktionerna, du måste ha inkluderat dem på nått konstigt ställe.
> Funktionerna kan du inkludera överst eller underst eller var du vill ha dem.

Funktionerna ligger i en fil som heter "funcs.asp" och denna inkluderas högst upp med *\<!--#include file="css/funcs.asp"--\>*.

Allt annat i denna fil funkar klockrent, men inte just dina funktioner.

Varför?

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

## #7 — doggelito, 2007-03-07T15:14Z

> **MickeA.com skrev:**
>
> Varför?

Svårt att säga varför när man inte ser koden men jag googla lite på "inkompatibla typer" och ofta så skickar man in fel värde in i funktionen.
Är det verkligen Date() du skickar in i funktionen eller har du ett eget datum?
Har du ett eget datum som en sträng så kan du slänga på CDate för att konvertera till datumtyp:

```
datum = CDate(dittdatum)
```

Funktionerna är testade och fungerar om man använder dem rätt. Jag lovar! :)

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

## #8 — MickeA.com, 2007-03-07T15:38Z

> **doggelito skrev:**
>
> Funktionerna är testade och fungerar om man använder dem rätt. Jag lovar! :)

Jo, jag tror dig.
När jag testade körde jag enl. din kod, alltså med "Date()", därför tycker jag att det är konstigt att det inte funkade.
Jag flyttade preics koden från includefilen in i filen där funktionerna används och då fungerar det konstigt nog.

Har även fått ordning på det andra med, det här med färgning av datum fixade genom DateDiff().

```
For dtm = dtmFirstDay To dtmLastDay
	the_month = ""
	If intCount Mod 7 = 0 AND intCount > 0 Then
		Response.Write(VbTab & "<div style=""clear: both; height: 0px;"">&nbsp;</div>" & VbCrLf)
		Response.Write(VbTab & "<p class=""weekday asweek"" style=""border-left: 1px #6D6D6D solid;""><br /><br />" & DatePart("ww", dtm, 2, 2) & "</p>" & vbCrLf)
	End If
	If DateDiff("m", date_string, dtm) = -1 Or DateDiff("m", date_string, dtm) = 1 Then
		Response.Write(VbTab & "<p class=""weekday premonth"">" & DatePart("d", dtm) & "</p>" & vbCrLf)
	Else
		Response.Write(VbTab & "<p class=""weekday"">" & Day(dtm) & "</p>" & vbCrLf)
	End If
	intCount = intCount + 1
Next
```

Finns det kanske någon alternativ lösning?

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

## #9 — doggelito, 2007-03-07T19:49Z

Kul att du fick fart på grejjorna! :)

> **MickeA.com skrev:**
>
> Finns det kanske någon alternativ lösning?

Det ser väl bra ut.
En liten optimeringsgrej kan ju vara att skippa din intCount, den behöver du egentligen inte.
Du skulle kunna nyttja weekday() istället för att ta reda på brytningarna.
<http://www.devguru.com/technologies/vbscript/13987.asp>

Jag är ganska säker på att du listar ut hur! ;)

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

## #10 — MickeA.com, 2007-03-07T19:50Z

> **doggelito skrev:**
>
> En liten optimeringsgrej kan ju vara att skippa din intCount, den behöver du egentligen inte.
> Du skulle kunna nyttja weekday() istället för att ta reda på brytningarna.
> <http://www.devguru.com/technologies/vbscript/13987.asp>
> 
> Jag är ganska säker på att du listar ut hur! ;)

Hehe, jo, det grejjar jag nog utan problem, tack!

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/157892-kalender-skriva-ut-föregående-månads-sista-dagar
