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
Bör If - Else-then konstuktion användas här?
Om ja, kan jag få ett litet exempel på konstuktionen?
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.
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
om det rör sig om december?
om svaret på fråga 1 är ett ja, så kolla om dag = 24
om svar på fråga 2 är ett ja, så Response.Write "julafton"
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
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
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>"
%>
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:
dina indrag - är de "bara" för att koden skall vara lättare att läsa?
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
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)
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
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
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.
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:
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" :)
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