iDayMonth = DatePart("d", DateSerial(Year(dteDate), Month(dteDate)+1, 0))
Kalendern vill inte börja med första dagen i månden
86 svar · 1 703 visningar · startad av plelkes · sida 4 av 5
Frågan, av plelkes
Hej, jag har snickrat ihop en kalender som skall i HTML-tabell visa aktuell månads dagar. Nedanstående kod fungerade perfekt för maj-03 <%@LANGUAGE=VBSCRIPT %> <% Option Explicit %> <HTML> <BODY> <% Session.LCID = 1053 'Vi skapar en array med 42 element. 1:a elementet = 1:a cellen = 1:a Måndagen i månaden '2:a elementet = 2:a cellen = 1:a Tisdagen i månaden 'osv 'Om vi placerar månadens daga
Läs frågan i sin helhet →MItt nästa problem är att jag hela tiden får en rad med tomma (dvs svarta) celler. Så jag har försökt med (ändringen är i fet-stil)
For i = 0 to 41
If i mod 7 = 0 Then Response.Write "<TR>"
If aKalender(i)= "" [B]And i mod < 7[/B] Then
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write " _" & "</TD>"
Else
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & " "
Response.Write "</FONT></CENTER></TD>"
End If
Next
If i mod 6 = 0 And i <> 0 Then
Response.Write "</TR>"
End If
Men får bara felmeddelandet:
Microsoft VBScript compilation error '800a03ea'
Syntax error
If aKalender(i)= "" And i mod < 7 Then
------------------------------^
If aKalender(i) = "" And i mod 7 > 0 Then
Menar du så?
Det är enklare att kolla på detta sätt
If i < iFirstDayIndex Or i > iLastDayIndex Then
Tyvärr funkar inget av dina förslag - dvs fel rutor blir svart färgade.
Det jag vill är att efter att månadens sista dag är i fylld , så kompleteras den tabellraden, och därefter
Response.Write "</TABLE></BODY></HTML>"
Har även försökt med
Do Until i mod NOT 7
Men får inte till detta heller
Den sista dagen är iLastDayIndex, så när i > iLastDayIndex uppfylls, så är den sista dagen i månaden utskriven. Bekymret du har kvar är att sista cellen du skriver ut troligtvis behöver få en colspan="x", där x = 7 - (i mod 7). Då bör du kunna skriva din loop på följande sätt
Response.Write "<table><tr>"
For i = 0 to iLastDayIndex
If i mod 7 = 0 Then Response.Write "</tr><tr>"
If i < iFirstDayIndex Then
Response.Write "<td bgcolor=""black"">&nbsp;</td>"
Else
Response.Write "<td align=""center"" valign=""middle"" bgcolor=""black"" style=""color: #330099;"">" & aKalender(i) & "</td>"
End If
Next
x = 7 - (iLastDayIndex mod 7)
If x > 0 Then Response.Write "<td colspan=""" & x & """>&nbsp;</td>"
Response.Write "</tr></table></body></html>"
Mod-operationen är precis som plus, minus eller division osv, så du kan inte kombinera den hur du vill.
Jag är ledsen Engine, men dit senaste kod verkar inte fungera
Nedanstående kod genererar ovanstående sida
'låt oss skapa tabellen
Response.Write "<TABLE ALIGN=CENTER BORDER=1 CELLSPACING=1 WIDTH=75% HEIGHT=75% >"
Response.Write "<TH COLSPAN=7> <FONT SIZE=+2>"
'visa aktuell månad och år
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>"
Response.Write "<tr>"
For i = 0 to iLastDayIndex
If i mod 7 = 0 Then Response.Write "</tr><tr>"
If i < iFirstDayIndex Then
Response.Write "<td bgcolor=""black""> </td>"
Else
Response.Write "<td align=""center"" valign=""middle"" bgcolor=""black"" style=""color: #330099;"">" & aKalender(i) & "</td>"
End If
Next
x = 7 - (iLastDayIndex mod 7)
If x > 0 Then Response.Write "<td colspan=""" & x & """> </td>"
Response.Write "</tr></table></body></html>"
%>
Det blidde ett felmeddelande där...
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'CDate'
/plelkesprojekt/test_list.asp, line 35
För att slippa ovanstående felmedd. måste ändra koden
DateSerial(Year(Request.Form("year")), Month(Request.Form("month"))+1, 0))
till
[KOD]iDayMonth = DatePart("d", DateSerial(Year(dteDate), Month(dteDate)+1, 0))
Ska det inte vara
DateSerial(Request.Form("year"), Request.Form("month") + 1, 0)
Eftersom jag antar att du har en <select> för år och en för månad.
verkar funka med båda sätten
Vet att troligtvis såbryter jag mot ngra principer vi har här på forumet, men äär på jobbet och får inte fram felutskrifterna..
Vill fortfarande trolla bort sista svarta raden.
Kommet på följande konstruktion som borde funka, men ngnstans blir det fel:
For i = 0 to 41
If i mod 7 = 0 Then Response.Write "<TR>" 'i mod 7 = 0 betyder att om i är jämt delad med 7
'Eftersom raderna går 0 ->6, 7 ->13, 14 ->20 osv så börjar_
'en ny tabellrad för varje gång i/7 = 0, dvs_
'0, 7, 14, 21, 28, 35
If aKalender(i) < 1 Then
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write " _" & "</TD>"
If i > intLastDayIndex And i mod 7 = 0 Then Response.Write "</TR>_
</TABLE></BODY></HTML>"
Else
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write " _" & "</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
Next
If i mod 6 = 0 And i <> 0 Then
Response.Write "</TR>"
End If
Response.Write "</TABLE></BODY></HTML>"
Nu drar jag till med ytterligare en suspekt lösning. Om det fungerar lär du märka det ;)
Response.Write "<tr>"
If iFirstDayIndex > 0 Then
Response.Write "<td bgcolor=""#000000"" colspan=" & (intFirstDayIndex - 1) & ">&nbsp;</td>"
End If
For i = [b]intFirstDayIndex[/b] to [b]intLastDayIndex[/b]
If i mod 7 = 0 Then Response.Write "<TR>" [blue]'i mod 7 = 0 betyder att om i är jämt delad med 7
'Eftersom raderna går 0 ->6, 7 ->13, 14 ->20 osv så börjar_
'en ny tabellrad för varje gång i/7 = 0, dvs_
'0, 7, 14, 21, 28, 35[/blue]
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & " "
Response.Write "</FONT></CENTER></TD>"
If i mod 6 = 0 And i <> 0 Then Response.Write "</TR>"
Next
intColSpan = 7 - (intLastDayIndex mod 7)
If intColSpan > 0 Then
Response.Write "<td bgcolor=""#000000"" colspan=" & intColSpan & ">&nbsp;</td>"
End If
Response.Write "</tr></TABLE></BODY></HTML>"
Får inte Engines lösning att fungera, å andra sidan verkar jag inte få ngra att fungera alls från jobbet*snyft*
Min undran är ifall jag kan skriva som jag skrev i nedanstående kod
1: If aKalender(i) < 1 Then
2: Response.Write "<TD BGCOLOR=""#000000"">"
3: Response.Write " _" & "</TD>"
4: If i > intLastDayIndex And i mod 7 = 0 Then
5: Response.Write "</TR>_
6: </TABLE></BODY></HTML>"
7: Else
8: Response.Write "<TD BGCOLOR=""#000000"">"
9: Response.Write " _" & "</TD>"
10: End If
11: Else
12: Response.Write "<TD ALIGN=""CENTER""
13: VALIGN=""MIDDLE""><CENTER><FONT
14: COLOR=""#330099"">"
15: Response.Write aKalender(i) & " "
16: Response.Write "</FONT></CENTER></TD>"
17: End If
18: Next
If i mod 6 = 0 And i <> 0 Then
Response.Write "</TR>"
End If
Response.Write "</TABLE></BODY></HTML>"
Uppenbarligen är det ngt fel med koden, men vad??
Med rad 4, 5 och 6 har jag tänkt säga att om i> intLastDayIndex
OCH i jämt delbart med 7, dvs vi har kommit till tabellrads slutet så avsluta raden och tabellen.
Om i > intLastDayIndex, men INTE jämt delbart med 7 så skriv ut en svart cell. Fortsätt skriva till radslutet
Kan tyvärr inte logga in till Brinkster för att prova,
men kan man skriva på följande sätt?
If i mod 7 = 0 Then Response.Write "<TR>"
If aKalender(i)= "" Then
Response.Write "<TD BGCOLOR=""#000000"">"
Response.Write " _" & "</TD>"
[B]Do until i > intLastDayIndex And i mod 7 = 0
[/B]
Else
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & " "
Response.Write "</FONT></CENTER></TD>"
End If
Next
If i mod 6 = 0 And i <> 0 Then
Response.Write "</TR>"
End If
Jag blir inte riktigt klok på dina bekymmer ;)
Så här gjorde jag min kalender
dteNow = Date()
intFirstDayIndex = WeekDay(DateSerial(Year(dteNow), Month(dteNow), 1), 2)
intLastDayIndex = DatePart(DateAdd("d", -1, DateAdd("m", 1, DateSerial(Year(dteNow), Month(dteNow), 1))))
strHTML = "<table><tr><td>Mån</td><td>Tis</td><td>Ons</td><td>Tor</td><td>Fre</td><td>Lör</td><td>Sön</td></tr>" & _
= "<tr><td colspan=""7"" height=""1"" bgcolor=""black""></td></tr>" & _
= "<tr><td colspan=""" & (intFirstDayIndex - 1) & """>&nbsp;</td>"
For intIndex = intFirstDayIndex To intLastDayIndex
If intIndex - intFirstDayIndex + 1 = Day(dteNow) Then
strHTML = strHTML & "<td bgcolor=""white"">" & (intIndex -intFirstDayIndex + 1) & "</td>"
Else
strHTML = strHTML & "<td bgcolor=""gray"">" & (intIndex - intFirstDayIndex + 1) & "</td>"
End If
If intIndex mod 7 = 0 Then
strHTML = strHTML & "</tr><tr>"
intIndex = intIndex + 1
Next intIndex
If 7 - (intLastDayIndex mod 7) > 0 Then
strHTML = strHTML & "<td colspan=""" & (7 - (intLastDayIndex mod 7)) & "&nbsp;</td>"
strHTML = strHTML & "</tr></table>"
Response.Write strHTML
Den fungerar väl som det är tänkt, men innehåller inga finesser, eftersom jag har suttit och testat där för att kunna hjälpa dig ;) Kruxet kan vara att jag skriver den i C# och svarar dig med VBScript, men jag tror inte att det ska vara några allvarliga missar någonstans.
Herj,
mina bekymmer:
-
Varför kan jag inte skriva koden på det sätttet jag angav i mitt förra inlägg?
-
Är inte bekant med ditt sätt att skriva tex
strHTML = strHTML & "</tr><tr>"Hur skulle det se ut med Response.Write?
1. Jag fick den uppfattningen att det inte fungerade?
2. Response.Write "</tr><tr>". strHTML är en sträng jag bygger upp med den HTML-kod som senare ska visas.
Det stämmer att min kod inte funkar, men undrar varför det inte gör.
Anser att det borde funka om man fritt översätter...
Ett litet förtydligande kanske:
Nedanstående fungerande if satser
If aKalender(i) < 1 Then
2: Response.Write "<TD BGCOLOR=""#000000"">"
3: Response.Write " _" & "</TD>"
4: If i > intLastDayIndex And i mod 7 = 0 Then
5: Response.Write "</TR>_
6: </TABLE></BODY></HTML>"
7: Else
8: Response.Write "<TD BGCOLOR=""#000000"">"
9: Response.Write " _" & "</TD>"
10: End If
som jag vill utföra så länge som
Do until i > intLastDayIndex And i mod 7 = 0
Har laborerat med koden, men inte lyckats få till det
1: If aKalender(i) < 1 Then
2: Response.Write "<TD BGCOLOR=""#000000"">"
3: Response.Write " _" & "</TD>"
4: If i > intLastDayIndex And i mod 7 = 0 Then
5: Response.Write "</TR>_
6: </TABLE></BODY></HTML>"
7: Else
8: Response.Write "<TD BGCOLOR=""#000000"">"
9: Response.Write " _" & "</TD>"
10: End If
11: Else
12: Response.Write "<TD ALIGN=""CENTER""
13: VALIGN=""MIDDLE""><CENTER><FONT
14: COLOR=""#330099"">"
15: Response.Write aKalender(i) & " "
16: Response.Write "</FONT></CENTER></TD>"
17: End If
18: Do until i > intLastDayIndex And i mod 7 = 0
19: Next
Snälla ASP-gurus hjälp mig få till det hela
Do Until i > intLastDayIndex And i mod 7 = 0
If aKalender(i) < 1 Then
Response.Write "<TD BGCOLOR=""#000000""> _</TD>"
Else
Response.Write "<TD ALIGN=""CENTER"" VALIGN=""MIDDLE""><CENTER><FONT COLOR=""#330099"">"
Response.Write aKalender(i) & " "
Response.Write "</FONT></CENTER></TD>"
End If
If i mod 7 = 0 Then Response.Write("</tr><tr>")
i = i + 1
Loop
Response.Write "</TR></TABLE></BODY></HTML>"
Så skulle det kunna se ut...
Jag tycker den här stackars kodsnutten borde fixa sig själv snart ;)
