asphelper.de - Tipps & Skripts - Kalender

Link: Wichtiger Hinweis in eigener Sache!


 Autor: Klaus Keller Erstellt am: 2005-02-09 Aufrufe: 12518 


 << Vorheriger Tipp Nächster Tipp >>



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">&nbsp;</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"">&nbsp;</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"">&nbsp;</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


 << Zum vorherigen Tipp 71:
Login-Bereich mit Benutzerverwaltung

 Zum nächsten Tipp 73 >>
IIF im Eigenbau

top top
© Copyright By Klaus Keller, 2001-2008 - Alle Rechte vorbehalten.