jag använder mig av "Teach Yourself ASP in 21 days"
Där hittade jag nedanstående kodexet, som är tänkt att visa en kalender Blir tyvärr ett långt inlägg, men forumets önskemål är ju att fullständig kod skall visas.
<%@ Language = VBSCRIPT %>
<% Option Explicit %>
<HTML>
<BODY>
<%
Function GetMonthName(iMonth)
Select Case iMonth
Case 1:
GetMonthName = "January"
Case 2:
GetMonthName = "February"
Case 3:
GetMonthName = "March"
Case 4:
GetMonthName = "April"
Case 5:
GetMonthName = "May"
Case 6:
GetMonthName = "June"
Case 7:
GetMonthName = "July"
Case 8:
GetMonthName = "August"
Case 9:
GetMonthName = "September"
Case 10:
GetMonthName = "October"
Case 11:
GetMonthName = "November"
Case 12:
GetMonthName = "December"
Case Else:
GetMonthName = "**INVALID MONTH**"
End Select
End Function
Dim dbCurrentDate
dbCurrentDate = "1/1/2000"
Dim aCalendarDays(42)
Dim iFirstWeekday
iFirstWeekday = DatePart("w",DateSerial(Year(dbCurrentDate), Month(dbCurrentDate), 1))
'Now, we want to loop from 1 to the number of days in the
'current month, populating the array aCalendarDays
Dim iDaysInMonth
iDaysInMonth = DatePart("d",DateSerial(Year(dbCurrentDate), Month(dbCurrentDate)+1, 1-1))
Dim iLoop
For iLoop = 1 to iDaysInMonth
aCalendarDays(iLoop + iFirstWeekday - 1) = iLoop
Next
Dim iColumns, iRows
iColumns = 7
iRows = 6 - Int((42 - (iFirstWeekDay + iDaysInMonth)) / 7)
'Now, create the table
%>
<TABLE ALIGN=CENTER BORDER=1 CELLSPACING=1 WIDTH=75% HEIGHT=75%>
<TH COLSPAN=7>
<FONT SIZE=+2>
<%
'Display the month and year
Response.Write GetMonthName(Month(dbCurrentDate))
Response.Write ", " & Year(dbCurrentDate)
%>
</FONT>
</TH>
<%
'Now, loop through 1 through iRows, then 1 through iColumns
Dim iRowsLoop, iColumnsLoop
For iRowsLoop = 1 to iRows
'Create a new row
Response.Write "<TR>"
For iColumnsLoop = 1 to iColumns
'Create a new column
'If there is a day there, display it, else black out the cell
If aCalendarDays((iRowsLoop-1)*7 + iColumnsLoop) > 0 then
'Display the date
Response.Write "<TD VALIGN=TOP ALIGN=RIGHT WIDTH=""14%"">"
Response.Write aCalendarDays((iRowsLoop-1)*7 + iColumnsLoop)
Response.Write "</TD>"
Else
'Black out the cell
Response.Write "<TD BGCOLOR=BLACK> </TD>"
End If
Next
'Close the row
Response.Write "</TR>"
Next
%>
</TABLE>
</BODY>
</HTML>
Uppenbarligen
Now that we have our populated array, we need to display the array in calendar form. We will create a table of 7 columns, one for each day of the week.
rör det sig bl.a. här om array och tabell.
Jag har följande problem.Jag trodde att en 2 dim array börjar med (0,0) som första position
Men som det visas här Så börjar i denna kod på position (1,1)
Skall det vara så?
Tyvärr har även jag dålig, om inte obefintlig koll på arrays.
Men jag tycker att kalendern liknar till det Vide visar ....
Därför antog jag att det rör sig om en 2dim array
Looparna som används i koden är bara för att presentera html-tabellen korrekt. Data finns i den endimensionella arrayen aCalendarDays.
Bara för att klargöra det. :)
Så egentligen är ingenting konstigt, de två looparna (columns och rows börjar på 1). Att "rutan" i kalender råkar ha "index" 1,1 är av den anledningen, och inget annat. :)
Förmodligen lyckades jag väl snurra till det för dig ännu mer nu, men det är inte min avsikt i alla fall.
Så egentligen är ingenting konstigt, de två looparna (columns och rows börjar på 1). Att "rutan" i kalender råkar ha "index" 1,1 är av den anledningen, och inget annat
Som ni ser börjar tabellen på en söndag. Hur skulle jag kunna få det hela börja på Måndag?
Förmodligen lyckades jag väl snurra till det för dig ännu mer nu
Tvådimensionella arrayer används ofta för att representera resultatdata från en databas / SQL-fråga, och då ofta genom att man skapar arrayen med recordset-objektets metod GetRows().
Nja @nders, kanske var jag lit otydlig i min följdfråga...
Om jag använder lösningen:[KOD]Dim MyDays
MyDays = Array("Måndag", "Tisdag", "Onsdag", ....."Söndag")
Kan jag fortfarande göra kalendern? Vilka ändringar behöver jag göra i så fall?
Kanske förslag som kan sparka mig i rätt riktning?
får jag fram att iLoop egentligen är antalet dagar i aktuella månaden. Så vad säger de egentligen med den koden??? Hur kan jag "printa ut" aCalenderDays(6)?
Du missuppfattar lite där, denna kod:
For iLoop = 1 to iDaysInMonth
aCalendarDays(iLoop + iFirstWeekday - 1) = iLoop
Next
Detta gör ju att arrayen aCalendarDays fylls med värden.
Loopen kommer ju att snurra lika många varv som iDaysInMonth innehåller.
Anta att iFirstWeekday är lika med 4
Varv 1 blir då aCalendarDays(4) = 1, varv två blir
aCalendarDays(5) = 2 osv tills hela arrayen är fylld.
får jag fram att iLoop egentligen är antalet dagar i aktuella månaden. Så vad säger de egentligen med den koden??? Hur kan jag "printa ut" aCalenderDays(6)?
Du missuppfattar lite där, denna kod:
For iLoop = 1 to iDaysInMonth
aCalendarDays(iLoop + iFirstWeekday - 1) = iLoop
Next
Detta gör ju att arrayen aCalendarDays fylls med värden.
Loopen kommer ju att snurra lika många varv som iDaysInMonth innehåller.
Anta att iFirstWeekday är lika med 4
Varv 1 blir då aCalendarDays(4) = 1, varv två blir
aCalendarDays(5) = 2 osv tills hela arrayen är fylld.
Din array har ju ett antal platser.
aCalendarDays(1)
aCalendarDays(2) osv
Loopen gör ju att värdet: ( iLoop + iFirstWeekday - 1) ändras för varje varv loopen gör (iLoop räknas ju upp ett snäpp)
Då blir det ju som så att först får då (med de förutsättningar jag skrev i inlägget ovan):
aCalendarDays(4) sitt värde, nästa varv får aCalendarDays(5) sitt värde osv.
iLoop är ju själva räknaren som räknar upp, startar på 1, därav antar jag (utan att ha lusläst koden) dras det sen bort -1 , alternativet borde ju kunna vara att börja räkna från 0 i stället.
iFirstWeekday är ju med för att den inte ska börja räkna på första dagen i veckan, utan första dagen i månaden.
Det är tydligen en konst att ställa rätta frågor. Konst som jag inte behärskar än...
Tack solbulle :bire i
iLoop är ju själva räknaren som räknar upp, startar på 1, därav antar jag (utan att ha lusläst koden) dras det sen bort -1 , alternativet borde ju kunna vara att börja räkna från 0 i stället.
iFirstWeekday är ju med för att den inte ska börja räkna på första dagen i veckan, utan första dagen i månaden.