» Start & Installation » ASP-Grundlagen » VBScript » Datenbanken » Erweiterte Techniken » Fehlercode-Suche » FAQ » Forum für aspfehlercodes » ASP » JavaScript » ASCII & ANSI » HTTP-Statuscodes » Codepage » LCID » VBScript » JScript
|
Link: Wichtiger Hinweis in eigener Sache!
| Autor: Klaus Keller | Erstellt am: 2005-02-09 | Aufrufe: 12518 |
Tipp 72: Kalender
Das Forum ist oftmals eine gute Quelle für neue Tipps, so auch für diesen Tipp. Ein einfacher Kalender der einen Monat anzeigt. Dafür wurde der nachfolgende Kalender erstellt. Dieser ist einfach aufgebaut und erweiterbar. Ausserdem soll das Design einfach anpassbar sein, auch dies ist eine Grundlage des Kalenders. Daher werden mehrere CSS-Klassen eingesetzt, zur Auswahl stehen mehrere Designs. Die CSS-Anweisung wurden in eine Datei ausgelagert, z.B. Style7.css. Insgesamt stehen 7 unterschiedliche Stylesheet-Dateien zur Auswahl.
Zuerst einmal ein Aufruf des Kalenders, die Funktion heisst Calendar. Als Paramter wird der Monat und das Jahr übergeben. So sieht der Aufruf des Kalenders aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <% @ Language="VBScript" LCID = 1031 %><% Option Explicit Response.Buffer = true Session.LCID = 1031
'================================================================================== 'Name und Version 'Kalender <-> Version 0.1, letzte Änderung am 2005-01-19 '================================================================================== 'http://www.asphelper.de - ASPKurs, Fehlercodes, Tips & Skripts für ASP-Programmierer ' ' Möchten Sie einen Artikel/Tipp oder ein Skript bei asphelper.de veröffentlichen? ' Kein Problem: http://www.asphelper.de/Autoren/ ' ' 'Copyright ©2001-2005 Klaus Keller 'Die Skripte sind Computerprogramme die lt. §69UrhG Urheberrechtlichen Schutz 'geniessen und dürfen nicht als eigene Programme ausgegeben werden. Das Anbieten 'zum Download bedarf der Zustimmung. Alle Skripte wurden mit grösstmöglicher Sorgfalt 'entwickelt, sollten dennoch Fehler enthalten sein, wird keine Haftung übernommen, 'weder für direkt noch indirekt entstehende Schäden. ' 'Klaus Keller 'http://asphelper.de ' 'PS: Ich freue mich über Ihr Feedback & einen Gästebucheintrag. '====================================================================================
%> <html> <head> <link rel="stylesheet" href="Style7.css" type="text/css" /> </head> <body> <% call Calendar(month(date()),year(date())) %> </body> </html><% |
In Zeile 37 wird der Kalender aufgerufen, hier wird der aktuelle Monat angegeben sowie das aktuelle Jahr. Als Stylesheet-Datei wurde die Style7.css ausgewählt, natürlich stehen im Download mehrere CSS-Dateien zur Verfügung. Nachfolgend die Kalender-Funktion:
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| public function Calendar(ByRef strMonth, ByRef strYear) dim intKW, intWeekday_Start, intSumOfDays, index, index2, intDayNumber intWeekday_Start = DatePart("w", "01." & strMonth & "." & strYear) intSumOfDays = getDaysOfMonth(strMonth, strYear) %> <table border=1> <tr> <th colspan="8" class="tForm_Color1"> <% Response.write(Server.HTMLEncode(MonthName(strMonth))) %> </th> </tr> <tr> <th class="tForm_Color1"> </th> <th class="tForm_Color1">MO</th> <th class="tForm_Color1">DI</th> <th class="tForm_Color1">MI</th> <th class="tForm_Color1">DO</th> <th class="tForm_Color1">FR</th> <th class="tForm_Color1">SA</th> <th class="tForm_Color1">SO</th> </tr> <% intDayNumber = intWeekday_Start for index = 1 to intSumOfDays 'Öffnendes tr mit KW-Angabe schreiben if intDayNumber mod 7 = 1 or index = 1 then Response.Write("<tr>") intDayNumber = 1 'KW schreiben intKW = KW(index & "." & strMonth & "." & strYear) Response.Write("<td class=""tForm_Color1""><b>" & (intKW) & "</b></td>") end if 'Alle leeren Felder vor dem 1. Tag schreiben if index = 1 then for index2 = 1 to intWeekday_Start - 2 Response.Write("<td class=""tForm_Color2""> </td>") intDayNumber = intDayNumber + 1 next end if 'Tag schreiben Response.Write("<td class=""tForm_Color2"">" & index & "</td>") 'Abschliessendes tr schreiben if intDayNumber mod 7 = 0 then Response.Write("</tr>") end if intDayNumber = intDayNumber + 1 next for index2 = intDayNumber to 7 Response.Write("<td class=""tForm_Color2""> </td>") next if not intDayNumber = 8 then Response.Write("</tr>") end if %> </table> <% end function |
In der Zeile 43 werden die benötigten Variablen deklariert. Der Variablen intWeekday_Start wird in Zeile 45 der erste Tag eines Monats zugewiesen, inklusive Monat und Jahr. Die Anzahl der Tage des Monats wird in Zeile 46 mit der Funktion getDaysOfMonth ermittelt.
Der Tabellenanfang inklusive der Angabe des Tageskürzels (z.B. MO für Montag) wird in den Zeilen 50 bis 65 durchgeführt. Falls der Tag ein Montag ist, oder die Schleife zum ersten mal durchlaufen wird, dann in den wird in den Zeilen 70 bis 76 ein öffnende tr-Tag für eine neue Tabellenreihe geschrieben. Falls es der erste Durchlauf ist, müssen eventuell noch leere Tabellenzeilen geschrieben werden, das erfolgt in den Zeilen 79 bis 84.
Den Tag noch schreiben und eventuell ein schliessendes tr-Tag schreiben ist die Aufgabe der Zeilen 87 bis 92. Falls der letzte Tag des Monats kein Sonntag ist, dann muss die Tabellenreihe mit leeren Tabellenzellen aufgefüllt werden, das und das eventuell schliessende tr-Tag wird in den Zeilen 97 bis 102 geschrieben.
Zuletzt noch einige Hilfsfunktionen, die im Kalender benötigt werden. Diese Funktion wurden bereits in anderen Tipps vorgestellt. Die Funktion KW wurde in Tipp 52: Kalenderwoche ermitteln. Die Funktion getDaysOfMonth ist aus Tipp 56: Anzahl Tage eines Monats ermitteln, die Funktion IsLeapYear aus Tipp 51: Ist das ein Schaltjahr?
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| Public Function KW(ByVal strDatum) Dim Temp strDatum = CDate(strDatum) Temp = DateSerial(Year(strDatum + (8 - Weekday(strDatum)) Mod 7 - 3), 1, 1) KW = (strDatum - Temp - 3 + (Weekday(Temp) + 1) Mod 7) \ 7 + 1 End Function
Public Function getDaysOfMonth(ByVal strMonth, ByVal strYear) Dim arrMonth arrMonth = Array(31,28,31,30,31,30,31,31,30,31,30,31) If strMonth = "2" Then If isLeapYear(strYear) Then getDaysOfMonth = 29 Else getDaysOfMonth = 28 End If Else getDaysOfMonth = arrMonth(strMonth - 1) End If End Function
Public Function IsLeapYear(ByVal intYear) If intYear mod 4 = 0 Then If (intYear mod 100 > 0) OR (intYear mod 400 = 0) Then IsLeapYear = true End If End If End Function %> |
Herunterladen: tip72.zip
|
|