En enkel kalender till din hemsida
Förord
En kalender på sin hemsida kan vara trevligt i många sammanhang, kanske har du ett band med spelningar? Kanske en dagbok? Det finns många användningsområden. I denna artikel kommer jag visa hur man enkelt kan göra för att generera en kalender. Håll till godo!Innehåll
»»
»
Relaterade artiklar
» Rätt tid på ASP-sidorEn enkel kalender till din hemsida
Inledning
För att skapa en kalender finns i stort sätt allt man behöver redan inbyggt i VBScript. Nyckelfunktionerna som vi kommer använda oss av är följande:- DateAdd(typ, antal, datum)
typ - Vilken typ av "enhet" du vill ändra.
yyyy=år; q=kvartal; m=månad; y=dag på året; d=dag; w=veckodag; ww=vecka på året; h=timme; n=minut; s=sekund
antal - Hur mycket du vill ändra datumet med den valda enheten.
datum - Det datum du vill utgå från.
Denna funktion använder vi för att t.ex. gå en månad tillbaka på ett aktuellt datum.
'Returnerar datumet 2003-01-01
strDate = DateAdd("m", -1, #2003-02-01#) - DateSerial(år, månad, dag)
år - Det år du vill använda.
månad - Den månad du vill använda.
dag - Den dag du vill använda.
Denna funktion returnerar att giltigt datum som vi sen kan använda i de andra funktionerna.
'Returnerar ett giltigt datum för 2003-02-01
strDate = DateSerial(2003, 02, 01) - Weekday(datum, [veckans första dag])
datum - Det datum du vill kolla vilken veckodag det är.
veckans första dag - Valfritt, vilken veckodag veckan ska börja på. Söndag (1) är standard.
0=använd systeminställningarna; 1=söndag; 2=måndag; 3=tisdag; 4=onsdag; 5=torsdag; 6=fredag; 7=lördag
Denna funktion används för att ta reda på vilken veckodag ett visst datum är.
'Returnerar 7 (lördag)
lngDay = Weekday(#2003-02-01#) - Year(datum)
datum - Det datum du vill veta vilket år det är.
Denna funktion returnerar vilket år datumet är.
'Returnerar 2003
lngYear = Year(#2003-02-01#) - Month(datum)
datum - Det datum du vill veta vilken månad det är.
Denna funktion returnerar vilken månad datumet är.
'Returnerar 2
lngMonth = Month(#2003-02-01#) - Day(datum)
datum - Det datum du vill veta vilken dag det är.
Denna funktion returnerar vilken dag i månaden datumet är.
'Returnerar 1
lngDay = Day(#2003-02-01#)
Utökning
Förutom dessa inbyggda funktioner så behöver vi ännu en, eftersom det inte finns något bra inbyggt sätt att få ut hur många dagar en månad består av har jag skapat GetDaysInMonth(), den fungerar som så att den tar in ett år och en månad som parametrar, skapar ett datum av dessa, lägger till en månad och drar bort en dag på datumet. På så sätt hamnar vi på den sista dagen på den valda månaden, sen är det bara att se vilket nummer den dagen har, som är samma som antalet dagar i månaden.
<%
'GetDaysInMonth()
Public Function GetDaysInMonth(ByVal vlngYear, ByVal vlngMonth) 'As Long
'Declarations
Dim lngResult 'As Long
Dim strDate 'As String
'Get date, add one month, reduce one day
strDate = DateSerial(vlngYear, vlngMonth, 1)
strDate = DateAdd("m", 1, strDate)
strDate = DateAdd("d", -1, strDate)
'Set result
lngResult = Day(strDate)
'Return result
GetDaysInMonth = lngResult
End Function
%>
Förutom denna funktion har jag skapat en som renderar själva kalendern, RenderCalendar(). Samma sak gäller här, man skickar in ett år och en månad som man vill skapa en kalender för. Funktionen fungerar så att först kollar den vilken veckodag månaden börjar på och loopar ut så många tomma celler som behövs framför den 1:a i månaden. Sen loopar den igenom dagarna i månaden och kontrollerar hela tiden veckodagen och lägger till en ny rad varje gång vi gått förbi söndag. Sist men inte minst loopar den ut tomma celler för resterande veckodagar om den sista veckodagen i månaden inte är en söndag.
<%
'RenderCalendar()
Public Function RenderCalendar(ByVal vlngYear, ByVal vlngMonth) 'As String
'Declarations
Dim strResult 'As String
Dim lngDaysInMonth 'As Long
Dim lngDay 'As Long
Dim lngWeekday 'As Long
'Init variables
lngDaysInMonth = GetDaysInMonth(vlngYear, vlngMonth)
'Render
strResult = strResult & ""
strResult = strResult & ""
'Loop, render empty
For lngWeekday = 1 To Weekday(DateSerial(vlngYear, vlngMonth, 1), 2) - 1
strResult = strResult & " "
Next
'Loop
For lngDay = 1 To lngDaysInMonth
'Render
strResult = strResult & "" & lngDay & " "
'Set weekday
lngWeekday = lngWeekday + 1
'Check weekday
If lngWeekday > 7 And lngDay < lngDaysInMonth Then
'Render
strResult = strResult & " "
'Set weekday
lngWeekday = 1
End If
Next
'Check weekday
If lngWeekday > 7 Then
'Loop, render empty
For lngWeekday = Weekday(DateSerial(vlngYear, vlngMonth, lngDay), 2) To 7
strResult = strResult & " "
Next
End If
'Render
strResult = strResult & " "
strResult = strResult & "
"
'Return result
RenderCalendar = strResult
End Function
%>
Demo
För att testa kalendern skapar du en fil, exempelvis "calendar.asp", och lägger in de två ovanstående funktionerna samt följande kod:
<%
'Declarations
Dim strDate 'As String
'Get request-parameters
strDate = Request("date")
'Verify parameters
If Not IsDate(strDate) Then strDate = Date
%>
">prev
<%= MonthName(Month(strDate)) & " " & Year(strDate)%>
">next
<%= RenderCalendar(Year(strDate), Month(strDate)) %>
0 Kommentarer