---
title: "Skottår"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/152354-skottår"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Organick"
published: "2006-10-10T21:09:00.000Z"
updated: "2006-10-19T22:19:46.000Z"
replies: 23
views: 1368
page: 1
pages: 2
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/152354-skottår"
---

# Skottår

_Sida 1 av 2._

## #1 — Organick, 2006-10-10T21:09Z

Hvordan laver jeg min kalender til at klare at regne ud hvornår det er skottår?

```
Function getMonth(monthNr)

	Select Case monthNr
		Case 1 manad = "Januari"
		Case 2 manad = "Februari"
		Case 3 manad = "Mars"
		Case 4 manad = "April"
		Case 5 manad = "Maj"
		Case 6 manad = "Juni"
		Case 7 manad = "Juli"
		Case 8 manad = "Augusti"
		Case 9 manad = "September"
		Case 10 manad = "Oktober"
		Case 11 manad = "November"
		Case 12	manad = "December"
	End Select
	
	getMonth = manad
	
End Function

Function getDays(monthNr)

	Select Case monthNr
		Case 1 days = 31
		Case 2 days = 28
		Case 3 days = 31
		Case 4 days = 30
		Case 5 days = 31
		Case 6 days = 30
		Case 7 days = 31
		Case 8 days = 31
		Case 9 days = 30
		Case 10 days = 31
		Case 11 days = 30
		Case 12	days = 31
	End Select
	
	getDays = days
	
End Function
```

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

## #2 — Peter S, 2006-10-10T21:20Z

Så här skulle jag vilja göra:

```
Function isLeapYear()
 y = Year(Date())
 isLeapYear = (y mod 4 = 0 And (y mod 100 <> 0 Or y mod 400 = 0)) * -1
End Function

Function getDays(monthNr)

	Select Case monthNr
		Case 1 days = 31
		Case 2 days = 28 + [B]isLeapYear()[/B]
		Case 3 days = 31
		Case 4 days = 30
		Case 5 days = 31
		Case 6 days = 30
		Case 7 days = 31
		Case 8 days = 31
		Case 9 days = 30
		Case 10 days = 31
		Case 11 days = 30
		Case 12	days = 31
	End Select
	
	getDays = days
	
End Function
```

Är dock litet osäker på huruvida det fetstilta typkonverteras till ett numeriskt värde (1 eller 0).

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

## #3 — Organick, 2006-10-10T21:54Z

Fungerer ikke

Det fungerer ikke rigtigt. Nu kommer kun datoerne 1,2,3 og alle kommer under mandag, resten bliver ikke vist, når jeg går til f.eks februar 2008. Hvad kan det skyldest?

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

## #4 — Peter S, 2006-10-10T22:08Z

Det verkar som att True typkonverteras till -1. Jag har därför redigerat mitt förra inlägg till att ta hänsyn till det. Ett snabbt test verkar visa att det fungerar.

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

## #5 — Organick, 2006-10-10T22:41Z

Fungerer hellere ikke

Takk for hjælpen.

Jeg får den samme fejl. Den viser bare datoerne 1,2,3 og bliver sorteret under mandag. Jeg viser bare hele koden, hvis det kan hjælpe dig bedre.

```
<%
Function getMonth(monthNr)

	Select Case monthNr
		Case 1 manad = "Januari"
		Case 2 manad = "Februari"
		Case 3 manad = "Mars"
		Case 4 manad = "April"
		Case 5 manad = "Maj"
		Case 6 manad = "Juni"
		Case 7 manad = "Juli"
		Case 8 manad = "Augusti"
		Case 9 manad = "September"
		Case 10 manad = "Oktober"
		Case 11 manad = "November"
		Case 12	manad = "December"
	End Select
	
	getMonth = manad
	
End Function

Function isLeapYear()
 y = Year(Date())
 isLeapYear = (y mod 4 = 0 And (y mod 100 <> 0 Or y mod 400 = 0)) * -1
End Function

Function getDays(monthNr)

	Select Case monthNr
		Case 1 days = 31
		Case 2 days = 28 + isLeapYear()
		Case 3 days = 31
		Case 4 days = 30
		Case 5 days = 31
		Case 6 days = 30
		Case 7 days = 31
		Case 8 days = 31
		Case 9 days = 30
		Case 10 days = 31
		Case 11 days = 30
		Case 12	days = 31
	End Select
	
	getDays = days
	
End Function

Function getNext(s)
' s = sign (eg +,-)
' am = aktuell månad
' ay = aktuellt år
	
	If s = "+" Then
		If mm = 12 Then
			am = 1
			ay = yyyy + 1
		Else
			am = mm + 1
			ay = yyyy
		End If
	Else
		If mm = 1 Then
			am = 12
			ay = yyyy - 1
		Else
			am = mm - 1
			ay = yyyy
		End If
	End if
	
	getNext = am & "&y=" & ay
	
End Function

' Plocka fram aktuellt datum
datum	= Date
aManad 	= Month(datum)
aDag	= Day(datum)
aAr		= Year(datum)

' Vilken månad skall visas?
If Request.QueryString("m") <> "" Then
	mm 		= Request.QueryString("m")
	yyyy 	= Request.QueryString("y")
Else
	mm 		= Month(datum)
	yyyy 	= Year(datum)
End If

' Hur många rutor skall skippas första veckan?
skip 	=  DatePart("w", mm & "/1-"&yyyy, vbMonday) - 1

%>

<SCRIPT LANGUAGE="javascript">
<!--
function popup(url,width,height)
{
	unik=new Date();
	unik=unik.getSeconds()+"_"+unik.getMinutes()+"_"+unik.getHours();
	stuff = "toolbar=no,menubar=no,scrollbars=yes,resizable=no,width= " +width + ", height = " +height
	window.open(url , unik , stuff );
}
//-->
</SCRIPT>

<table width="175" border="0" cellspacing="0" cellpadding="1">
  <tr> 
    <td bgcolor="#999999"> 
      <table width="175" border="0" cellspacing="0" cellpadding="1" bgcolor="#FFFFFF">
        <tr bgcolor="#CCCCCC"> 
          <td width="25"> 
            <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">M&aring;</font></div>
          </td>
          <td width="25"> 
            <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Ti</font></div>
          </td>
          <td width="25"> 
            <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">On</font></div>
          </td>
          <td width="25"> 
            <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">To</font></div>
          </td>
          <td width="25"> 
            <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Fr</font></div>
          </td>
          <td width="25"> 
            <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">L&ouml;</font></div>
          </td>
          <td width="25"> 
            <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">S&ouml;</font></div>
          </td>
        </tr>
        <%
		set Rs = Server.CreateObject("ADODB.Recordset") 
		RS.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("kalender.mdb") 
		RS.Source = "Select DISTINCT(dd) From handelser Where mm = " & mm & " And yyyy = " & yyyy & " Order By dd"
		RS.Open()

		dag = 1 - skip 
		x = 0 
		Do Until x > (getDays(mm) + skip) / 7 

			Response.Write "<tr>" 

			For y = 1 To 7 

				bgColor = "#FFFFFF" 
				If not RS.EOF Then 
					If int(dag) = int(RS("dd")) Then 
						bgColor = "#CCCCCC" 
						skriv = "true"
						
						'RS.MoveNext 
					End If 
				End If
				
				If aDag&aManad&aAr = dag&mm&yyyy Then
					bgColor = "#FFCCCC"
				End If

				If dag > 0 AND dag < getDays(mm)+1 Then 
					borderColor = "#999999" 
				Else 
					borderColor = "#FFFFFF" 
				End If 

				Response.Write "<td width='25'>" 
				Response.Write "<table width = '100%' border='0' cellspacing='0' cellpadding='1' bgcolor='" &borderColor &"'>"_ 
						& "<tr><td>" 
				Response.Write "<table width = '100%' border='0' cellspacing='0' cellpadding='1' bgcolor='" & bgColor & "'>"_ 
						& "<tr><td>" 

				Response.Write "<div align='center'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>" 

				If dag > 0 And dag < getDays(mm)+1 Then 
					If skriv = "true" Then
						Response.Write "<a href='javascript:popup(""visa_dag.asp?dd=" & dag & "&mm=" & mm & "&yy=" & yyyy & """,330,200);'>" & dag & "</a>"
						RS.MoveNext
						skriv = "false"
					Else
						Response.Write dag
					End if
				End If 

				Response.Write "</font></div></td></tr></table></td></tr></table></td>" 

				dag = dag + 1 

			Next 
			Response.Write "</tr>" 

			x = x + 1 
		Loop 

		RS.Close() 
		%>
        <tr bgcolor="#CCCCCC"> 
          <td width="25" bgcolor="#CCCCCC"> 
            <div align="center"><a href="kalendar.asp?m=<%=getNext("-")%>"><img src="left.gif" width="15" height="10" border="0"></a></div>
          </td>
          <td colspan="5"> 
            <div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
              <%Response.Write "<b>" & getMonth(mm) & " (" & yyyy & ")</b>"%>
              </font></div>
          </td>
          <td width="25"> 
            <div align="center"><a href="kalendar.asp?m=<%=getNext("+")%>"><img src="right.gif" width="15" height="10" border="0"></a></div>
          </td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td bgcolor="#FFFFFF"><font face="Verdana, Arial, Helvetica, sans-serif" size="1"><a href="administrera.asp">ADMIN</a></font> 
    </td>
  </tr>
</table>
```

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

## #6 — Engine^, 2006-10-11T08:49Z

Lösningen är väl att skriva om funktionen så att den returnerar det som förväntas...

```
function isLeapYear()
  dim intYear

  intYear = year( date() )

  isLeapYear = ( intYear mod 4 = 0 and ( y mod 100 <> 0 or y mod 400 = 0 ) ) * -1

  if ( isLeapYear ) then
    isLeapYear = 1
  else
    isLeapYear = 0
  end if

end function
```

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

## #7 — Peter S, 2006-10-11T08:59Z

Vad returnerade den innan omskrivningen då?

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

## #8 — @nders, 2006-10-11T09:25Z

... kan också vara vettigt att låta funktionen ta emot årtalet, så man faktiskt kan använda den till andra år än det aktuella. :)

mvh

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

## #9 — Engine^, 2006-10-11T09:52Z

> **Peter S skrev:**
>
> Vad returnerade den innan omskrivningen då?

VBScripts version av true/false...

\-1 = true
everything else = false

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

## #10 — Organick, 2006-10-11T11:42Z

Det fungerer ikke. Nu viser den 28 dage i februrar unansett årstal, det skal vise 29 dage februrar 2008. Hvad kan det skyldes?

```
function isLeapYear()
  dim intYear

  intYear = year( date() )

  isLeapYear = ( intYear mod 4 = 0 and ( y mod 100 <> 0 or y mod 400 = 0 ) ) * -1

  if ( isLeapYear ) then
    isLeapYear = 1
  else
    isLeapYear = 0
  end if

end function

Function getDays(monthNr)

	Select Case monthNr
		Case 1 days = 31
		Case 2 days = 28 + isLeapYear
		Case 3 days = 31
		Case 4 days = 30
		Case 5 days = 31
		Case 6 days = 30
		Case 7 days = 31
		Case 8 days = 31
		Case 9 days = 30
		Case 10 days = 31
		Case 11 days = 30
		Case 12	days = 31
	End Select
	
	getDays = days
	
End Function
```

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

## #11 — @nders, 2006-10-11T11:46Z

> Hvad kan det skyldes?

Det beror på att leapyear-funktionen inte tar emot aktuellt år, utan bara använder det år som är just nu. 2006 är ju inte ett skottår.

```
function isLeapYear(intYear)
  isLeapYear = ( intYear mod 4 = 0 and ( intYear mod 100 <> 0 or intYear mod 400 = 0 ) ) * -1

  if ( isLeapYear ) then
    isLeapYear = 1
  else
    isLeapYear = 0
  end if

end function
```

Sedan måste du skicka med året i kallet till funktionen:

```
iLeapDay = isLeapYear(2008)
```

Istället för 2008 skickar du enklast in ett variabelt värde för året du söker, och sedan lägger du till iLeapDay till antalet februaridagar.

mvh

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

## #12 — Peter S, 2006-10-11T12:31Z

```
y -> intYear
```

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

## #13 — @nders, 2006-10-11T12:40Z

(Mitt inlägg är redigerat efter Peters korrigeringsförslag)

mvh

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

## #14 — Erik Juhlin, 2006-10-11T13:13Z

Varför inte bara skriva så här?

```
Function getDays(monthNr)
	getDays = Day(DateSerial(Year(Now), monthNr + 1, 0))
End Function
```

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

## #15 — Peter S, 2006-10-11T13:41Z

> **Erik Juhlin skrev:**
>
> Varför inte bara skriva så här?

En anledning kan vara inkompetens.

Red./ Detta gäller alltså ej Anders, Engine^ och Organick.

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

## #16 — @nders, 2006-10-11T13:52Z

> **Erik Juhlin skrev:**
>
> Varför inte bara skriva så här?

Bra fråga. :)
Mycket snyggare. Jag skyller på att... hmm... jag vet inte jag.

(y)

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

## #17 — Engine^, 2006-10-11T14:06Z

> **Erik Juhlin skrev:**
>
> Varför inte bara skriva så här?

Jag skyller på @nders... :)

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

## #18 — Organick, 2006-10-11T21:10Z

Først 1000 takk for hjælpen.

Den virkede med at sætte iLeapDay = IsLeapYear(2008)

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

## #19 — Peter S, 2006-10-11T22:13Z

> **Organick skrev:**
>
> Først 1000 takk for hjælpen.
> 
> Den virkede med at sætte iLeapDay = IsLeapYear(2008)

Kanon! Jag föreslår att du postar din fullständiga lösning och använder funktionen [acceptera som slutgiltigt svar](http://www.webforum.nu/faq.php?faq=vb_board_usage#faq_faq_acceptance) på det inlägget.

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

## #20 — Organick, 2006-10-12T14:31Z

Jeg troede at den funktion virkede, det var noget med min cache som gjorde at den ikke virkede. Den eneste funktion jeg får at fungere, er:

```
Function getDays(monthNr)

	Select Case monthNr
		Case 1 days = 31
		Case 2
			if yyyy = 2008 then
				days = 29
			else
				days = 28
			end if
		Case 3 	days = 31
		Case 4 	days = 30
		Case 5 	days = 31
		Case 6 	days = 30
		Case 7 	days = 31
		Case 8 	days = 31
		Case 9 	days = 30
		Case 10 days = 31
		Case 11 days = 30
		Case 12	days = 31
	End Select
	
	getDays = days
	
End Function
```

 

Hvordan gør jeg at 2012 2016....osv. bliver udskiftet med 2008?

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/152354-skottår  
Nästa sida: https://www.webforum.nu/amne/asp/152354-skottår/page2.md
