webForumDet fria alternativet

När infaller påskdagen

ASP

28 svar · 1 116 visningar · startad av plelkes

Medlem sedan mars 2002823 inlägg
Frågan#1

Hej,
har försökt mig på ett litet funktion som skall beräkna fram datumet som påskdagen infaller på.
Följande kod har jag snickrat ihop

<%
Session.LCID = 1053
Dim strDate, dteDate, c, n, k, i, j, l, m, d
strDate = Request.Form("year")
dteDate = CDate(strDate)
function ge(easterd)	
        c = dteDate/100
	n = dteDate - 19 * (dteDate/19)
	k = (c - 17) / 25
	i = c - (c/4) - (c - k )/3 + (19*n) + 15
	i = i -30*(i/30)
	i = i - (i/28)*(1-(i/28)*(29/(i + 1))*((21 - n))/11)
	j = dteDate + (dteDate/4) + i + 2 - c + (c/4)
	j = j - 7 * (j / 7)
	l = i - j
	m = 3 + ( 1 + 40)/44      '// månaden
	d = 1 + 28 - 31 * ( m/4) '// dagen
End function 	
Response. Write "Påskdagen infaller:  & easterd
%>

Med ovanstående kod får jag inget skärmutskrift av påskdagen.
Å andra sidan får inte jag ngt felutskrift heller... :h

Medlem sedan juni 200032 967 inlägg
#2

Utan att veta om logiken stämmer eller inte: du kallar aldrig på funktionen, och funktionen returnerar ingenting. Den borde inte heller ta någon parameter, eftersom du inte ska använda något invärde i funktionen.

Mvh

Medlem sedan mars 2002823 inlägg
#3

kallar aldrig på funktionen, och funktionen returnerar ingenting

Trodde att jag gjorde det med

Response. Write "Påskdagen infaller:  & easterd

Hur borde det vara?

Den borde inte heller ta någon parameter, eftersom du inte ska använda något invärde i funktionen.

Hur menar du? Jag har ju en formulär, där man väljer år

strDate = Request.Form("year")
dteDate = CDate(strDate)
Medlem sedan jan. 2001101 inlägg
#4

Response.Write ge()

Och ta bort parametern i funktionen

Medlem sedan mars 2002823 inlägg
#5

Menar ni så här:

<%
Session.LCID = 1053
Dim strDate, dteDate, c, n, k, i, j, l, m, d
strDate = Request.Form("year")
dteDate = CDate(strDate)
function easterd()	
        c = dteDate/100
	n = dteDate - 19 * (dteDate/19)
	k = (c - 17) / 25
	i = c - (c/4) - (c - k )/3 + (19*n) + 15
	i = i -30*(i/30)
	i = i - (i/28)*(1-(i/28)*(29/(i + 1))*((21 - n))/11)
	j = dteDate + (dteDate/4) + i + 2 - c + (c/4)
	j = j - 7 * (j / 7)
	l = i - j
	m = 3 + ( 1 + 40)/44
	d = 1 + 28 - 31 * ( m/4)
End function 	
Response. Write "Påskdagen infaller:  " & easterd()
%>

Tyvärr samma nedslående resultat

Medlem sedan juni 200032 967 inlägg
#6

Du måste returnera något från funktionen också. Nu gör du bara en massa uträkningar som inte används till något.

Jag vet inte heller vilket värde det är tänkt att du vill ha från funktionen, men det vet säkert du.

Mvh

Medlem sedan juni 200032 967 inlägg
#7

Förresten, ska inte ettan i raden m = 3 + ( 1 + 40)/44 vara ett l? Då förstår jag lite mer, och det ser ut att vara d du vill returnera från funktionen. Eller?

Medlem sedan juli 2001203 inlägg
#8

Returnerar gör du med

easterd = d

sist i din funktion

Medlem sedan jan. 2001101 inlägg
#9

Du har bara kopierat funktionen utan att ha koll på vad den gör, eller hur? :-)

Medlem sedan mars 2002823 inlägg
#10

Du har bara kopierat funktionen utan att ha koll på vad den gör, eller hur? :-)

Nej det stämmer inte. Jag har hittat ett "algoritm" som månad och dag för påskens infallande om man har året.
Jag trodde i min nybörjar enfald att jag skall använda mig av en funktion.
Men detta är mitt första försök med att konstruera en funktion

Medlem sedan jan. 2001101 inlägg
#11

En funktion tar (oftast) emot ett eller flera värden och returnerar ett annat.

Exempel:

Function Addera(a, b)
	Addera = a + b
End Function

Response.Write Addera(3, 5)

Detta ger utskriften 8.

Medlem sedan mars 2002823 inlägg
#12

dekt: OK jag fattar.
Vilken konstruktion rekomenderar du/ni i mitt fall?

Medlem sedan jan. 2001101 inlägg
#13

Det beror på vilka värden du vill hämta från funktionen, ju! :-) Säker på att du fattar?

Medlem sedan mars 2002823 inlägg
#14

jag fattar det du skrev:

En funktion tar (oftast) emot ett eller flera värden och returnerar ett annat.

Exempel:

kod:--------------------------------------------------------------------------------Function Addera(a, b)
Addera = a + b
End Function

Response.Write Addera(3, 5)--------------------------------------------------------------------------------

Detta ger utskriften 8.

Men vet inte hur jag skall anpassa till mina behov :x

Medlem sedan jan. 2001101 inlägg
#15

om m = månad och d = dag borde du fixa ett slutgiltigt return-värde för funktionen, t.ex. m & "-" & d

Sen skriva ut strDate & "-" & easterd()

Medlem sedan mars 2002823 inlägg
#16

som sagt så är jag hellt nybörjare på funktioner..

slutgiltigt return-värde för funktionen, t.ex. m & "-" & d

Hur skulle detta se ut i "min" funktion?

En annan fråga - kan man i ASP skriva formlerna som jag gjorde?

Medlem sedan aug. 2002207 inlägg
#17
<%
Session.LCID = 1053
Dim strDate, dteDate, c, n, k, i, j, l, m, d
strDate = Request.Form("year")
dteDate = CDate(strDate)
function easterd()	
        c = dteDate/100
	n = dteDate - 19 * (dteDate/19)
	k = (c - 17) / 25
	i = c - (c/4) - (c - k )/3 + (19*n) + 15
	i = i -30*(i/30)
	i = i - (i/28)*(1-(i/28)*(29/(i + 1))*((21 - n))/11)
	j = dteDate + (dteDate/4) + i + 2 - c + (c/4)
	j = j - 7 * (j / 7)
	l = i - j
	m = 3 + ( 1 + 40)/44
	d = 1 + 28 - 31 * ( m/4)
	easterd = m & "-" & d
End function 	
Response. Write "Påskdagen infaller:  " & easterd()
%>

Ungefär såhär skulle den kunna se ut, men jag vet inte riktigt vilka returvärden du vill ha. Det finns ju ett antal variabler att välja mellan. Du kanske skulle ta och se över funktionen och göra den enklare?

EDIT: Okey, jag testade funktionen och den gav lite konstiga siffror iaf.

Tyvärr fattar jag inte riktigt vad alla uträkningar gör. Jag tycker att det ser lite väl krångligt ut.

När inträffar påskdagen? Är det någon speciell dag på någon speciell vecka? Skall se om jag kan lösa något.

Medlem sedan mars 2002823 inlägg
#18

Håller med om att funktionen returnerar konstiga siffror. Men eftersom jag inte är ngn stjärna på matter, har jag svårt att ändra i formeln. Hittade det hela på denna sida
Mitt syfte är att hitta ett sätt att räkna ut datumet för påskens infallande. För att sedan därifrån kunna ta reda på vissa andra helgdagars infallande

Medlem sedan jan. 2001101 inlägg
#19

Testa:

<%

Session.LCID = 1053
Dim c, n, k, i, j, l, m, d

function entillnolla(x)
  if x < 10 then
    entillnolla = "0" & x
  else
    entillnolla = x
  end if
end function

function easterd(y)	
    c = y \ 100
    n = y - 19 * (y \ 19)
    k = (c - 17) \ 25
    i = c - c \ 4 - (c - k ) \ 3 + 19 * n + 15
    i = i - 30 * ( i \ 30 )
    i = i - ( i \28 ) * ( 1 - ( i \ 28 ) * ( 29 \ ( i + 1 )) * ((21 - n) \ 11))
    j = y + y \ 4 + i + 2 - c + c \ 4
    j = j - 7 * ( j \ 7 )
    l = i - j
    m = 3 + ( l + 40 ) \ 44
    d = l + 28 - 31 * ( m \ 4 )
    easterd = y & "-" & entillnolla(m) & "-" & entillnolla(d)
End function

Response. Write "Påskdagen infaller:  " & easterd(Request.Form("year"))
%>
Medlem sedan mars 2002823 inlägg
#20

Jättetack, fungerar som jag har tänkt :birp
Ngra frågor, för att kolla att jag fattat:

  1. funktionen entillnolla(x) är till för att tex april skall vara rätt (04)
  2. koden function easterd(y)
    Response. Write "Påskdagen infaller: " & easterd(Request.Form("year")) Betyder att y= Request.Form("Year")
  3. året, dvs Request.Form("Year") skrivs ej ut
264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)