webForumDet fria alternativet

villkor

ASPur ASP

30 svar · 785 visningar · startad av plelkes

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

Nu när jag har lyckats få ”ordning” på de svenska helgdagarna, tänkte jag vidareutveckla min almanacka. Det jag tänkte är att då en röd dag inträffar skall detta stå i min almanacka.

På min almanacka- sida har jag dels en textruta för året och en dropdown-lista för val av månad.
Om jag nu tex har nedanstående möjligheter:
Tex:
Om månad = 1 OCH dag = 1 skriv nyårsdagen
Om månad = 1 OCH dag = 6 skriv trettondag
Om månad = 6 OCH dag = 20 skriv midsommarafton
Om månad = 6 OCH dag = 21 skriv midsommardagen
Och om inte nåt av fallen är uppfyllda skriv dag

  1. Bör If - Else-then konstuktion användas här?
  2. Om ja, kan jag få ett litet exempel på konstuktionen?
  3. Eller bör i detta fal "Case" användas?
  4. Och hur skulle ni konstruera detta?
Medlem sedan maj 20012 812 inlägg
#2

I det fallet hade jag nog använt mig av Case:

switch(month){
 case 1:
  switch(day){
   case 1:
    break;
   case 2:
    break;
  break;
}

Ursäkta C# koden, men kommer inte ihåg hur man skriver i VBScript :(

Nu har du värre problem än så eftersom visa helgdagar inte går på datum, utan vilken veckodag det är, som exempel viss midsommar, det är inte ett speciellt datum, utan alltid en fredag, medans julafton alltid är den 24 oberoende av vilken veckodag det är.

Så det är alltså inte så enkelt att man bara kan ha en massa IF-satser och kolla emot. Så jag hade nog lagt alla helgdagar i en databas, vilken hade haft ett batchjob kopplat till sig den 1/1 varje år, som hade räknat fram vilka dagar som är helgdagar just detta år.
Sedan hade jag plockat fram dessa dagar i en array och på något smart sätt kollat om dag är en helgdag eller ej.

Antagligen hade jag gjort min array 2 dimensionell, så man hade kollat om en dag är helgdag så här.

if(_CheckDays[_iMont][_iDay] == true)
//-- dagen är en helgdag
else
//-- dagen är inte en helgdag

Så man fyller helt enkelt sin array med true/false beroende på om [MÅNAD][DAG] är en helgdag eller ej.

- M

Medlem sedan mars 2002823 inlägg
#3

Tack Magnus för ditt svar,,,
MEN

Nu har du värre problem än så eftersom visa helgdagar inte går på datum, utan vilken veckodag det är, som exempel viss midsommar, det är inte ett speciellt datum, utan alltid en fredag, medans julafton alltid är den 24 oberoende av vilken veckodag det är.

Men om jag tar fallet med julafton, varför kan jag inte hellt "enkelt" kolla om

  1. om det rör sig om december?
  2. om svaret på fråga 1 är ett ja, så kolla om dag = 24
  3. om svar på fråga 2 är ett ja, så Response.Write "julafton"
Medlem sedan mars 20015 287 inlägg
#4

Jag tror nog att du är medveten om problemet med att inte alla helger är på fasta datum, med tanke på dina tidigare trådar.
Av precis samma anledningen måste det ju vara väldigt svårt att lägga in det hela i en färdig db.
Dessa "enkla" helger som har fasta datum är ju lätta att ta rätt på, vare sig man använder If-satser, Case-satser eller databas.

Jag hade löst detta med If-satser eftersom att det förefaller enklast för mig. :)

skriv = "dag"

If manad = 1 then
	If dag = 1 then
		skriv = "nyårsdagen"
	Elseif dag = 6 then
		skriv = "trettondag"
	End if
End if

If manad = 6 then
	If dag = 20 then
		skriv = "midsommarafton"
	Elseif dag = 21 then
		skriv = "midsommardagen"
	End if
End if

response.write skriv
Medlem sedan mars 2002823 inlägg
#5

Nu har jag förskt med att "det" skall skriva ut alla helgonadagen oom det är rätt månad och rätt dag. Men med nedanstående kod blir detbara kajko

<%@LANGUAGE="VBSCRIPT" %>
<HTML>
<HEAD>
<TITLE>v&auml;gg kalender</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"></HEAD>

<BODY>

<FORM ACTION="" METHOD="post">
  <TABLE WIDTH="500" BORDER="1" ALIGN="CENTER" CELLPADDING="1" CELLSPACING="1" ID="val">
    <TR> 
      <TD WIDTH="119" HEIGHT="30"><CENTER>
          V&auml;lj &Aring;r (&Aring;&Aring;&Aring;&Aring;)</CENTER></TD>
      <TD WIDTH="50" HEIGHT="30"> <DIV ALIGN="LEFT"> 
          <INPUT NAME="Year" TYPE="text" SIZE="10" MAXLENGTH="4">
        </DIV></TD>
      <TD><CENTER>V&auml;lj M&aring;nad 
        </CENTER></TD>
      <TD><SELECT NAME="month" SIZE="1">
          <OPTION VALUE="1">Januari</OPTION>
          <OPTION VALUE="2">Februari</OPTION>
          <OPTION VALUE="3">Mars</OPTION>
          <OPTION VALUE="4">April</OPTION>
          <OPTION VALUE="5">Maj</OPTION>
          <OPTION VALUE="6">Juni</OPTION>
          <OPTION VALUE="7">Juli</OPTION>
          <OPTION VALUE="8">Augusti</OPTION>
          <OPTION VALUE="9">September</OPTION>
          <OPTION VALUE="10">Oktober</OPTION>
          <OPTION VALUE="11">November</OPTION>
          <OPTION VALUE="12">December</OPTION>
        </SELECT></TD>
    </TR>
    <TR> 
      <TD COLSPAN="4" HEIGHT="30"> <DIV ALIGN="RIGHT">
          <INPUT TYPE="submit" NAME="Submit" VALUE="Visa Almanacka">
        </DIV></TD>
    </TR>
  </TABLE>
</FORM>
<%
Session.LCID = 1053

ar = Request.Form("Year")
manad = Request.Form("month")
If len(ar)= 0 Then
    ar = Year(Now())
Else
ar = Request.Form("Year")
End IF
If len(manad)= 0 Then
    manad = Month(Now())
Else
manad = Request.Form("month")
End IF
'allhelgonadagen
function GeAllhelgon(ar)
dteDate = ar & "-10" & "-31"
dteDate = CDate(dteDate)
intWeekday = WeekDay(dteDate, vbSunday)
newdate = dateAdd("d", 7-intWeekDay, dteDate)
GeAllhelgon = newdate
end function

strDate = ar & "-" & manad & "-01"
dteDate = CDate(strDate)

intFirstDayIndex = WeekDay(dteDate, 2) - 1  
iDayMonth = DatePart("d", DateSerial(Year(dteDate), Month(dteDate)+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>"
End IF
If manad = Month(GeAllhelgon(ar)) then
If aKalender(i) = Day(GeAllhelgon(ar)) then
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & "all helgonadag " 
Response.Write "</FONT></CENTER></TD>"
Else
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i)
Response.Write "</FONT></CENTER></TD>"
End If
End If
Next

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

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

Som vanligt är jag tacksam ifall ni ger även förklaring till mina fel

Utan ändringen fungerar allt som tänkt
Även

även

function GeAllhelgon(dteDate)
dteDate = ar & "-10" & "-31"
dteDate = CDate(dteDate)
intWeekday = WeekDay(dteDate, vbSunday)
newdate = dateAdd("d", 7-intWeekDay, dteDate)
GeAllhelgon = newdate
end function
manad = Month(GeAllhelgon(ar))
dagen = Day(GeAllhelgon(ar))

Response.Write manad
 Response.Write "<BR>"
 Response.Write dagen
'

fungerar för sig självt

Medlem sedan mars 2002823 inlägg
#6

Ngn som hittar felet månne?

Medlem sedan mars 20015 287 inlägg
#7

Jag får inte den där koden att fungera över huvud taget..

Medlem sedan mars 20015 287 inlägg
#8

Fast så här borde din koll se ut tycker jag:

If manad = Month(GeAllhelgon(ar)) then
	If aKalender(i) = Day(GeAllhelgon(ar)) then
		Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
		Response.Write aKalender(i) & "all helgonadag " 
		Response.Write "</FONT></CENTER></TD>"
	End If
Else
		Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
		Response.Write aKalender(i)
		Response.Write "</FONT></CENTER></TD>"

End If
Medlem sedan mars 20015 287 inlägg
#9
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

If manad = Month(GeAllhelgon(ar)) then
	If aKalender(i) = Day(GeAllhelgon(ar)) then
		Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
		Response.Write aKalender(i) & "all helgonadag " 
		Response.Write "</FONT></CENTER></TD>"
	End If
Else
	Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
	Response.Write aKalender(i)
	Response.Write "</FONT></CENTER></TD>"

End If
End IF
Next

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

Response.Write "</TABLE></BODY></HTML>"
%>
Medlem sedan mars 2002823 inlägg
#10

Solbulle, som vanligt ett jättetack för din hjälp :birp

Tänk att jag nästan gjorde rätt - men nära skjuter ju ingen..
Som vanligt ngra frågor:

  1. dina indrag - är de "bara" för att koden skall vara lättare att läsa?

  2. de andra helgdagarna - är det bara att lägga in de mellan End If och else?

    If manad = Month(GeAllhelgon(ar)) then
    	If aKalender(i) = Day(GeAllhelgon(ar)) then
    		Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
    		Response.Write aKalender(i) & "all helgonadag " 
    		Response.Write "</FONT></CENTER></TD>"
    	End If
     [I][red]nästa helgdag[/red][/I] 
    Else
    		Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
    		Response.Write aKalender(i)
    		Response.Write "</FONT></CENTER></TD>"
    
    End If
    
  3. kan det bli i koden när jag har tex. dteDate på flera ställen? Redan nu har jag kod1:

    function GeAllhelgon(ar)
    dteDate = ar & "-10" & "-31"
    dteDate = CDate(dteDate)
    

    och kod 2

    strDate = ar & "-" & manad & "-01"
    dteDate = CDate(strDate)
    

    kod 1 och 2 är rätt snarlika.
    Skall jag "frisera" mina koder?

Medlem sedan mars 2002823 inlägg
#11

Koden jag fick av solbulle

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

If manad = Month(GeAllhelgon(ar)) then
	If aKalender(i) = Day(GeAllhelgon(ar)) then
		Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
		Response.Write aKalender(i) & "all helgonadag " 
		Response.Write "</FONT></CENTER></TD>"
	End If
Else
	Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
	Response.Write aKalender(i)
	Response.Write "</FONT></CENTER></TD>"

End If
End IF
Next

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

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

Fungerar tyvärr inte som jag tänkte.
Årets alla helgonadag är månad 11 och dag 1.

Men om ni provar detta märker ni att koden inte skriver ut all helgonadagen som jag vill. Ni testar genom att välja november från dropp-down

Medlem sedan mars 2002823 inlägg
#12

Ett tillägg:
att mina helgdagar funkar har jag testat på dennasida .
Jag har testat med 10 olika år

Medlem sedan mars 20015 287 inlägg
#13

Nu då:

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

If cint(manad) = Month(GeAllhelgon(ar)) AND aKalender(i) = Day(GeAllhelgon(ar)) then
	Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
	Response.Write aKalender(i) & "all helgonadag " 
	Response.Write "</FONT></CENTER></TD>"
Else
	Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
	Response.Write aKalender(i)
	Response.Write "</FONT></CENTER></TD>"

End If
End IF
Next

If i mod 6 = 0 And i <> 0 Then 
	Response.Write "</TR>"
End If
Medlem sedan mars 20015 287 inlägg
#14

Apropå dina övriga frågor.
Indenteringen - indragen - gör jag för att det blir BRA mycket lättare att läsa och följa koden.

Spontant annars tycker jag du bör smacka ihop alla test av helger till en större funktion som förslagsvis returnerar helgnamnet.
Du verkar ju onekligen, med avseende på din länk, veta hur du ska plocka ut alla helgdagar.

Medlem sedan mars 2002823 inlägg
#15

Tack solbulle, du har räddat mig så att jag har ngra hårstrå kvar - har börjat slite mit hår i ren förtvivlan....

  • Hur skulle det se ut om jag hade flera villkor - säg att jag hade 2 till
  • cint(manad) = Month(nyar(ar)) AND aKalender(i) = Day(nyar(ar))
  • cint(manad) = Month(trettondag(ar)) AND aKalender(i) = Day(trettondag(ar))

Jag tycker att det är MYCKET svårt och komplicerat att göra dessa nästlade villkorssatser

Medlem sedan mars 2002823 inlägg
#16

solbulle skrev:

Spontant annars tycker jag du bör smacka ihop alla test av helger till en större funktion som förslagsvis returnerar helgnamnet.

kan du ge ett förslag hur denna funktion skulle se ut?

Medlem sedan mars 20015 287 inlägg
#17

typ att du fogar ihop alla funktioner o tester i en sub eller funktion.

function helg(datum)

If datum = GeAllhelgon(datum) then
	helg = "Allhelgona"
Elseif datum = GeJulafton(datum) then
	helg = "Julafton"
Else
	helg = "vardag" ' eller helt tomt iofs.
End iF

End function

Red. Om du gör på det viset kan du ju bara rakt av i din orginalkod lägga in:

Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & helg(aKalender(i))
Response.Write "</FONT></CENTER></TD>"

Man får väl komma på ett vettigt sätt att skicka in datumet dock

Medlem sedan feb. 20001 050 inlägg
#18

Hej hopp, får jag göra ett inlägg här ;)

Varför inte helt enkelt beräkna om det är en helgdag eller inte? Det är ganska komplicerat att räkna ut, men det finns en eller annan smart snubbe som tänkt ut hur man gör, så det är bara att implementera/programmera.

Jag har gjort en funktion för detta, den finns här: http://www.nic-sys.se/php/ Tyvärr är den skriven i PHP men du/ni kanske kan "översätta" :)

Medlem sedan mars 20015 287 inlägg
#19

nicclas: Är det inte det som det hålls på med då?

Medlem sedan feb. 20001 050 inlägg
#20

Jasså gör ni? Jag som trodde att ni tänkt göra en databas (eller en massa IF-satser) med en massa datum? "Min" kod beräknar fram om det är en helgdag eller inte, och fungerar för all överskådlig framtid, och dåtid.

Men det var kanske det ni tänkt er också, bara att jag inte förstod. Sorry.

139 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)