Einfachen PHP-Kalender für Webseite programmieren

6 | 17 Kommentare | 17611 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Einfachen PHP-Kalender für Webseite programmieren" mit Ihrem Wissen!

Anzeige Hier werben

Im folgenden Tutorial beschreibe ich euch wie Ihr einen einfach PHP Kalender für eure Webseite bauen könnt.

Grundlage

Als erstes lege ich fest welche Funktionen der Kalender haben soll.

  • Jahr zurück
  • Monat zurück
  • Anzeige des aktuell ausgewählten Monats + Jahr in Deutsch
  • Monat vor
  • Jahr vor
  • Ausgabe aller Tage eines Monats mit gekürztem Wochentag
  • PHP Kalender mit Timestamps steuern

1. Aller Anfang ist schwer

Um den ganzen Kalender zu steuern, egal in welche Richtung der Kalender gesteuert wird ( vor oder zurück in der Zeit ) bietet sich ein Timestamp an.

Kurz zur Erklärung. Ein Timestamp gibt das Datum und die Zeit in Sekunden seit dem 1.Januar 1970 00:00 Uhr zurück.

Sprich das Datum: 10.September 2008 00:00:00 entspricht 1220997600. Das heißt seit dem 1. Januar 1970 00:00:00 Uhr sind 1220997600 Sekunden bis zum 10.September 2008 00:00:00 vergangen.

Dadurch ergeben Sie eine Vielzahl von Möglichkeiten in PHP mit einem Timestamp zu arbeiten, auf die ich später noch genauer eingehe.

Als erstes brauchen wir das aktuelle Datum als Timestamp. Dafür benutze ich die in PHP integrierte Funktion time(). time() generiert einen Timestamp bis zur Sekunde in der ich das PHP Skript aufrufe.

 
PHP
1
2
3
4
<?php
$date = time();
echo $date;
?>

Nun gibt es ein Problem. Da nun immer das aktuelle Datum als Standardzeit genutzt wird, bereite ich das Skript auf die Übergabe der Datumsangabe über die URL vor. Dazu benötigen wir die von PHP definierte Variable $_GET. Mit $_GET['timestamp'] bekommen wir immer alle Zeichen die in der URL in der Variable "timestamp" stehen.

In der URL steht z.B. www.google.de/index.php?timestamp=123456789. Mit echo $_GET['timestamp'] würde PHP "123456789" ausgeben..

 
PHP
1
2
3
4
5
6
7
8
9
<?php
if( isset($_GET['timestamp']) && !empty($_GET['timestamp'])){
    $date = time();
} else {
    $date = $_GET['timestamp'];
}

echo $date;
?>

Kurz zur Erklärung. Wenn die URL wie folgend aussieht index.php?timestamp=1220997600, so prüft nun das PHP Skript ob in der URL die Variable timestamp gesetzt ist und ob die übergebene Variable einen Wert enthält. Wenn die Variable nicht gesetzt ist so wird der aktuelle Timestamp in die Variable $date geschrieben ansonsten wird der Wert aus der Variable Timestamp übernommen.

isset() = Prüft ob die angegebene Variable gesetzt ist.
empty() = Prüft ob die angegebene Variable leer ist
!empty() = Prüft ob die angegebene Variable nicht leer ist

Ich habe nun vier Funktionen angelegt, welche mir anhand der in $date abgelegten Timestamps den jeweiligen gesuchten Timestamp zurückliefert.

 
PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
function monthBack( $timestamp ){
    return mktime(0,0,0, date("m",$timestamp)-1,date("d",$timestamp),date("Y",$timestamp) );
}
function yearBack( $timestamp ){
    return mktime(0,0,0, date("m",$timestamp),date("d",$timestamp),date("Y",$timestamp)-1 );
}
function monthForward( $timestamp ){
    return mktime(0,0,0, date("m",$timestamp)+1,date("d",$timestamp),date("Y",$timestamp) );
}
function yearForward( $timestamp ){
    return mktime(0,0,0, date("m",$timestamp),date("d",$timestamp),date("Y",$timestamp)+1 );
}

Ich erkläre das an der Funktion monthBack().
Innerhalb der Funktion wandle ich den übergebenen Timestamp mit der in PHP implementierten Funktion date() in die gesuchte Form um.

Date("d",$timestamp) = Tag des Timestamps; Rückgabe: z.B.: 7
Date("m",$timestamp) = Monat des Timestamps; Rückgabe: z.B.: 9
Date("Y",$timestamp) = Jahr des Timestamps; Rückgabe: z.B.: 2008

Mit der Funktion mktime() wandel ich nun aus den einzelnen Datums Werten einen Timestamp.
Hierbei ist zu beachten das mktime() wie folgend die Werte erwartet:

mktime(Stunden,Minuten,Sekunden,Monat,Tag,Jahr);

2. Funktion getCalender()

Die Funktion getCalender() erwartet 2 Parameter wobei der zweite nicht Pflicht ist. Der erste Parameter ist das aktuelle Datum welches unter Punkt eins dieses Tutorials in die Variable $date geschrieben wird. Der zweite Parameter ist ein Array mit den Texten für die einzelnen Tagesüberschriften.

  • Parameter 1 muss einen Timestamp beinhalten
  • Parameter 2 muss ein Array sein. Z.B. array('Mon','Die','Mit','Don','Fre','Sam','Son'); Ist es nicht gesetzt wird Automatisch auf folgendes Array zurückgegriffen array('Mo','Di','Mi','Do','Fr','Sa','So'

Die Funktion ist ansich sehr einfach gehalten. Als erstes wird die Anzahl der Tages des aktuellen Monats ermittelt. Dies kann ganz einfach für die PHP Funktion date() gemacht werden. Dafür wird der Parameter "t" als String und der aktuelle Timestamp an date() übergeben.

$sum_days = date('t',$date);

Als nächstes speichert man zusätzlich die Anzahl der Tage des letzten Monats. Dies wird so ähnlich wie zuvor gemacht, nur dieses mal wird ein neu generierter Timestamp an die date() Funktion übergeben. Diesem Timestamp wurde einfach ein Monat abgezogen.

$LastMonthSum = date('t',mktime(0,0,0,(date('m',$date)-1),0,date('Y',$date)));

Nun werden einfach die übergebenen Überschriften durch eine ForEach Schleife dargestellt.

foreach( $headline as $key => $value ) { echo "<div class=\"day headline\">".$value."</div>\n"; }

Nun soll der Kalender mit dem richtigen Wochentag beginnen. Dafür benötigen wir eine for Schleife, die so oft ausgeführt, wird wie die Summe der Tage des aktuellen Datums sind. Z.B. 31 mal.

/z.B.*/ for( $i = 1; $i <= $sum_days; $i++ ) {...

Für den weiteren Verlauf der Schleife brauchen wir eine Variable die den aktuellen Tagnamen beinhaltet. Diese Variable heißt $day_name und beinhaltet durch date('D',$timestamp) den aktuellen Tagnamen auf Englisch.

Es werden jetzt die Tage vor dem aktuellen Monat berechnet. Da der Kalender nicht mit dem ersten des Monats anfängt, sondern mit dem Tag Montag. Deshalb müssen wir errechnen wie viele Tage vor dem 1 des Monats ausgegeben werden müssen. Dies wird mit der erste IF Abfrage gemacht. Wenn der Counter $i gleich 1 ist, wird wieder eine Schleife duchlaufen, welche mittels array_search() die Anzahl der Tage ausgibt. array_search() gibt den Key des gefunden Array-Values zurück. In unserem fall wäre es ein Zahl, da es sich bei unserem Array um ein Nummerisches Array handelt.

Arrays bieten die Möglichkeit in einer Variable mehrere Werte zu speichern. Dabei wird jeder Wert einem Schlüssel, auch key genannt, zugewiesen. Wenn die Schlüssel aus Zahlen bestehen, die üblicherweise bei 0 Anfangen zu zählen, bezeichnet man ein solches Array als Nummerisches Array.

$num_array = array('a','b','c'); Ergebniss: array( 0 => a, 1 => b, 2 => c);
Oder
$num_array = array(0 => 'a', 1 => 'b', 2 => 'c'); Ergebniss: array( 0 => a, 1 => b, 2 => c);

Nun kommt mit Abstand der einfachste Teil des Kalenders. Die folgende IF Abfrage gibt dem erstellten div Container nun die CSS Klasse "current" oder "normal". Es wird einfach geprüft ob date('d',$date) gleich $i ist.

Als letztes müssen nur noch die Tage nach dem aktuellen Monat berechnet werden. Dazu werden 6 Tage von dem gefundenen ArrayValue abgezogen. Diese Zahl lassen wir wieder durch die FOR Schleife laufen und geben dem Div Container noch die Klasse "after".

Warum 6? Weil ein Nummerisches Array mit 0 beginnt.

 
PHP
 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
function getCalender($date,$headline = array('Mo','Di','Mi','Do','Fr','Sa','So')) {
    $sum_days = date('t',$date);
    $LastMonthSum = date('t',mktime(0,0,0,(date('m',$date)-1),0,date('Y',$date)));
    
    foreach( $headline as $key => $value ) {
        echo "<div class=\"day headline\">".$value."</div>\n";
    }
    
    for( $i = 1; $i <= $sum_days; $i++ ) {
        $day_name = date('D',mktime(0,0,0,date('m',$date),$i,date('Y',$date)));
        $day_number = date('w',mktime(0,0,0,date('m',$date),$i,date('Y',$date)));
        
        if( $i == 1) {
            $s = array_search($day_name,array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'));
            for( $b = $s; $b > 0; $b-- ) {
                $x = $LastMonthSum-$b;
                echo "<div class=\"day before\">".sprintf("%02d",$x)."</div>\n";
            }
        } 
        
        if( $i == date('d',$date)) {
            echo "<div class=\"day current\">".sprintf("%02d",$i)."</div>\n";
        } else {
            echo "<div class=\"day normal\">".sprintf("%02d",$i)."</div>\n";
        }
        
        if( $i == $sum_days) {
            $next_sum = (6 - array_search($day_name,array('Mon','Tue','Wed','Thu','Fri','Sat','Sun')));
            for( $c = 1; $c <=$next_sum; $c++) {
                echo "<div class=\"day after\"> ".sprintf("%02d",$c)." </div>\n"; 
            }
        }
    }
}

Damit der Kalender noch einigermaßen brauchbar aussieht, vergeben wir noch ein paar CSS-Styles, die wie folgend aussehen könnten.

 
css
 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
40
41
42
43
44
45
46
47
48
49
50
body {
    font-family:verdana;
    font-size:12px;
}
a {
    color:black;
    text-decoration: none;
}
a:hover {
    text-decoration: underline;
    background: #eaeaea;
}
.calender {
    width:280px;
    border:1px solid black;
}
* html .calender,
* + html .calender {
    width:282px;
}
.calender div.after,
.calender div.before{
    color:silver;
}
.day {
    float:left;
    width:40px;
    height:40px;
    line-height: 40px;
    text-align: center;
}
.day.headline {
    background:silver;
}
.day.current {
    font-weight:bold;
}
.clear {
    clear:left;
}
.pagination {
    text-align: center;
    height:20px;
    line-height:20px;
    font-weight: bold;
}
.pagination a {
    width:20px;
    height:20px;
}
  • * + html .day = Dieser Style wird nur vom IE 7 interpretiert
  • * html .day = Dieser Style wird nur vom IE 6 interpretiert

3. Der Aufruf

Nun kommen wir zum Aufruf des Kalenders. Wie oben schon beschrieben muss $date immer gesetzt sein.
Des weiteren brauchen wir noch ein Array mit deutschen Monatsnamen, da PHP diese standardmäßig auf Englisch wiedergibt. Damit wir in unserem Template auch den deutschen Monatsnamen ausgegeben bekommen wird das Array wie folgend genutzt:

$arrMonth[date('F',$date)];

date('F') gibt den ausgeschriebenen Monatsnamen auf Englisch zurück.

Um noch ein wenig flexibilität in den Kalender zu bringen, kann noch ein Array mit alternativen Überschriften übergeben werden.

 
PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

if( isset($_REQUEST['timestamp'])) $date = $_REQUEST['timestamp'];
else $date = time();

$arrMonth = array(
    "January" => "Januar",
    "February" => "Februar",
    "March" => "M&auml;rz",
    "April" => "April",
    "May" => "Mai",
    "June" => "Juni",
    "July" => "Juli",
    "August" => "August",
    "September" => "September",
    "October" => "Oktober",
    "November" => "November",
    "December" => "Dezember"
);
    
$headline = array('Mon','Die','Mit','Don','Fri','Sam','Son');

?>

Nun bauen wir die oben beschriebenen Funktionen und Variablen in unser HTML/PHP Gerüst ein.
Um einen Monat zurück zu schalten wird die Funktion monthBack() wie folgt benutzt:

<a href="?timestamp=<?php echo monthBack($date); ?>" class="last">&laquo;</a>

Das gleiche kann nun noch für die anderen Funktion gemacht werden.

Als letztes wird nur noch die Funktion getCalender() aufgerufen. Diese bekommt das aktuelle Datum und die alternativen Überschriften übergeben. Es wird bewußt kein echo für die Funktion genutzt, da in der Funktion statt einem retrun Wert eine Ausgabe durch echo macht.

 
PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<div class="calender">
    <div class="pagination">
        <a href="?timestamp=<?php echo yearBack($date); ?>" class="last">|&laquo;</a> 
        <a href="?timestamp=<?php echo monthBack($date); ?>" class="last">&laquo;</a> 
        <span><?php echo $arrMonth[date('F',$date)];?> <?php echo date('Y',$date); ?></span>
        <a href="?timestamp=<?php echo monthForward($date); ?>" class="next">&raquo;</a>
        <a href="?timestamp=<?php echo yearForward($date); ?>" class="next">&raquo;|</a>  
    </div>
    <?php getCalender($date,$headline); ?>
    <div class="clear"></div>
</div>

Et voilá! Unser Kalender ist fertig. Hoffe das diese Artikel dem ein oder anderen Anfänger hilft.

4. Die Datei als ganzes

Hier noch einmal die gesamte Datei.

 
PHP
  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
 40
 41
 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
107
108
109
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
<?php
function monthBack( $timestamp ){
    return mktime(0,0,0, date("m",$timestamp)-1,date("d",$timestamp),date("Y",$timestamp) );
}
function yearBack( $timestamp ){
    return mktime(0,0,0, date("m",$timestamp),date("d",$timestamp),date("Y",$timestamp)-1 );
}
function monthForward( $timestamp ){
    return mktime(0,0,0, date("m",$timestamp)+1,date("d",$timestamp),date("Y",$timestamp) );
}
function yearForward( $timestamp ){
    return mktime(0,0,0, date("m",$timestamp),date("d",$timestamp),date("Y",$timestamp)+1 );
}

function getCalender($date,$headline = array('Mo','Di','Mi','Do','Fr','Sa','So')) {
    $sum_days = date('t',$date);
    $LastMonthSum = date('t',mktime(0,0,0,(date('m',$date)-1),0,date('Y',$date)));
    
    foreach( $headline as $key => $value ) {
        echo "<div class=\"day headline\">".$value."</div>\n";
    }
    
    for( $i = 1; $i <= $sum_days; $i++ ) {
        $day_name = date('D',mktime(0,0,0,date('m',$date),$i,date('Y',$date)));
        $day_number = date('w',mktime(0,0,0,date('m',$date),$i,date('Y',$date)));
        
        if( $i == 1) {
            $s = array_search($day_name,array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'));
            for( $b = $s; $b > 0; $b-- ) {
                $x = $LastMonthSum-$b;
                echo "<div class=\"day before\">".sprintf("%02d",$x)."</div>\n";
            }
        } 
        
        if( $i == date('d',$date)) {
            echo "<div class=\"day current\">".sprintf("%02d",$i)."</div>\n";
        } else {
            echo "<div class=\"day normal\">".sprintf("%02d",$i)."</div>\n";
        }
        
        if( $i == $sum_days) {
            $next_sum = (6 - array_search($day_name,array('Mon','Tue','Wed','Thu','Fri','Sat','Sun')));
            for( $c = 1; $c <=$next_sum; $c++) {
                echo "<div class=\"day after\"> ".sprintf("%02d",$c)." </div>\n"; 
            }
        }
    }
}
?>
<html>
<head>
<style type="text/css">
body {
    font-family:verdana;
    font-size:12px;
}
a {
    color:black;
    text-decoration: none;
}
a:hover {
    text-decoration: underline;
    background: #eaeaea;
}
.calender {
    width:280px;
    border:1px solid black;
}
* html .calender,
* + html .calender {
    width:282px;
}
.calender div.after,
.calender div.before{
    color:silver;
}
.day {
    float:left;
    width:40px;
    height:40px;
    line-height: 40px;
    text-align: center;
}
.day.headline {
    background:silver;
}
.day.current {
    font-weight:bold;
}
.clear {
    clear:left;
}
.pagination {
    text-align: center;
    height:20px;
    line-height:20px;
    font-weight: bold;
}
.pagination a {
    width:20px;
    height:20px;
}
</style>
</head>
<body>
<?php

if( isset($_REQUEST['timestamp'])) $date = $_REQUEST['timestamp'];
else $date = time();

$arrMonth = array(
    "January" => "Januar",
    "February" => "Februar",
    "March" => "M&auml;rz",
    "April" => "April",
    "May" => "Mai",
    "June" => "Juni",
    "July" => "Juli",
    "August" => "August",
    "September" => "September",
    "October" => "Oktober",
    "November" => "November",
    "December" => "Dezember"
);
    
$headline = array('Mon','Die','Mit','Don','Fri','Sam','Son');

?>

<div class="calender">
    <div class="pagination">
        <a href="?timestamp=<?php echo yearBack($date); ?>" class="last">|&laquo;</a> 
        <a href="?timestamp=<?php echo monthBack($date); ?>" class="last">&laquo;</a> 
        <span><?php echo $arrMonth[date('F',$date)];?> <?php echo date('Y',$date); ?></span>
        <a href="?timestamp=<?php echo monthForward($date); ?>" class="next">&raquo;</a>
        <a href="?timestamp=<?php echo yearForward($date); ?>" class="next">&raquo;|</a>  
    </div>
    <?php getCalender($date,$headline); ?>
    <div class="clear"></div>
</div>
</body>
</html>

Beispiel

Hier ein funktionsfähiges Beispiel!


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 4 Personen an der Seite "Einfachen PHP-Kalender für Webseite programmieren" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Einfachen PHP-Kalender für Webseite programmieren" hier bearbeiten.

Mitarbeiter

Kommentare: Einfachen PHP-Kalender für Webseite programmieren

Neuen Kommentar schreiben
Fehler im Kalender!
Beantworten

Habe mir den Kalender angeschaut. Nicht schlecht, nur ein Problem tritt auf. Ab Februar 2038 funktioniert der Kalender nicht mehr.Folgende Fehlermeldung:

Warning: date() expects parameter 2 to be long, string given in C:\server\xampp\htdocs\test_calender.php on line 134

Notice: Undefined offset: 0 in C:\server\xampp\htdocs\ltest_calender.php on line 134

Warning: date() expects parameter 2 to be long, string given in C:\server\xampp\htdocs\test_calender.php on line 134
» »|
Warning: date() expects parameter 2 to be long, string given in C:\server\xampp\htdocs\test_calender.php on line 16

Warning: date() expects parameter 2 to be long, string given in C:\server\xampp\htdocs\test_calender.php on line 17

Warning: date() expects parameter 2 to be long, string given in C:\server\xampp\htdocs\ltest_calender.php on line 17

Hoffe auf eine Lösung

family19660 am 08.02.2012 um 20:28
Re: Fehler im Kalender!
Beantworten

Habe leider keine Lösung dafür. Siehe Hier -> http://de.wikipedia.org/wiki/Unixzeit#Jahr-2038-Problem

Viele, aber bei weitem nicht alle Systeme, welche die Unixzeit verwenden, speichern und verarbeiten die Zeitangabe als vorzeichenbehaftete 32-Bit-Zahl (Integer). Somit umfasst der Sekundenraum die Werte −2.147.483.648 bis +2.147.483.647. Umgerechnet in Jahre entspricht dies etwas mehr als −68 bis +68.

Am 19. Januar 2038 um 3:14:08 Uhr UTC wird es daher bei Computersystemen, welche die Unixzeit in einer vorzeichenbehafteten 32-Bit-Variable speichern, zu einem Überlauf kommen. Die darzustellende Zeit wird dann mit der 2.147.483.648sten Sekunde nicht mehr in der Variable gespeichert werden können, womit es dann zum Jahr-2038-Problem kommen würde.

Unixzeiten vor dem 13. Dezember 1901 20:45:52 UTC sind mit einer vorzeichenbehafteten 32-Bit-Zahl auch nicht darstellbar, da die Zeitstempel kleiner als −2.147.483.648 wären.

Moderne Unix-Systeme verwenden zumindest in ihrer 64-Bit-Variante eine vorzeichenbehaftete 64-Bit-Zahl, was keine nennenswerte Beschränkung des Wertebereichs bewirkt.

Trotz der allgemeinen Tendenz zu 64-Bit Systemen sind eingebettete Systeme auf Unix-Basis zurzeit noch nahezu ausschließlich 32-Bit Systeme. Die in letzter Zeit erkennbare Tendenz, Haushaltsgeräte (z.B. Router, Radiowecker und Ähnliches) durch eingebettete Systeme auf Unix-Basis zu implementieren, birgt daher das Risiko, dass diese Geräte ab dem 19. Januar 2038 nicht mehr korrekt funktionieren.

Marcel Domke am 10.02.2012 um 08:12
Datum Farbe ändern
Beantworten

Ich wollte Fragen wie man von den Aktuellen Monat die Farbe des datums ändert, ich habe einen schwarzen hintergrund und die Tage vom 1-31 seh ich garnicht weil die schwarz sind den rest hab ich schon geändert.
Ich hoffe Ihr könnt mir helfen.

RazZer am 25.06.2011 um 21:29
Re: Datum Farbe ändern
Beantworten

mit CSS?

.calender .pagination span { Color:#ffffff; }

Marcel Domke am 02.07.2011 um 14:17
Hilfe!!!
Beantworten

tolles und Verständliches Skript. Leider schaffe ich es nicht eine Abfrage einzubauen, welche bestimmte Tage anders markiert. Diese Tage sind in einer MySQL-DB gespeichert. Es gibt diort die Felder von und bis (beide im DATE-Format).

Kann mir hier jemand helfen?????????

ASchwiedy am 06.06.2011 um 12:07
Re: Hilfe!!!
Beantworten

Na ja ist ganz einfach. Du übergibts ein Array an die Funktion mit den Tagen als $key. Dann kannst du innerhalb der Funktion drüber iterrieren und wenn ein Tag matched dann gibst du ihm eine CSS-Klasse mit.

Marcel Domke am 02.07.2011 um 14:20
kleiner Schönheitsfehler :)
Beantworten

Halle, mir ist ein kleiner Schönheitsfehler aufgefallen.

In jedem Monat wird der aktuelle Tag als heute angezeigt.

Bitte folgende Änderung vornehmen:

 
PHP
1
2
3
4
5
        if( $i == date('d',$date)) {
            echo "<div class=\"day current\">".sprintf("%02d",$i)."</div>\n";
        } else {
            echo "<div class=\"day normal\">".sprintf("%02d",$i)."</div>\n";
       }

ändern in:

 
PHP
1
2
3
4
5
        if( $i == date('d',$date) && date('m.Y',$date) == date('m.Y')) {
            echo "<div class=\"day current\">".sprintf("%02d",$i)."</div>\n";
        } else {
            echo "<div class=\"day normal\">".sprintf("%02d",$i)."</div>\n";
        }

ansonsten schönes einfaches script, danke.

Paric am 15.03.2011 um 09:28
Re: kleiner Schönheitsfehler :)
Beantworten

leider ist mir noch etwas aufgefallen. Die Anzeige der letzten Zahlen des Vormonats sind leider incorrekt. Der macht ne Zahl zu wenig. Das liegt meiner Meinung nach an dem Befehl arraysearch. ich habe das so gelöst:

alt  
PHP
1
2
3
4
5
6
7
       if( $i == 1) {
            $s = array_search($day_name,array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'));
            for( $b = $s; $b > 0; $b-- ) {
                $x = $LastMonthSum-$b;
                echo "<div class=\"day before\">".sprintf("%02d",$x)."</div>\n";
            }
        } 
neu:  
PHP
1
2
3
4
5
6
7
       if( $i == 1) {
            $s = array_search($day_name,array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'));
            for( $b = $s-1; $b >= 0; $b-- ) {
                $x = $LastMonthSum-$b;
                echo "<div class=\"day before\">".sprintf("%02d",$x)."</div>\n";
            }
        }

Paric am 15.03.2011 um 12:25
Re: kleiner Schönheitsfehler :)
Beantworten

Baue das doch bitte in den Artikel ein =)

Marcel Domke am 18.03.2011 um 13:02
Bug?
Beantworten

An dem Script gibts nen kleines Problem...

Er zeigt in diesem Monat (Dezember) Den 29. (Montag) und 30. (Dienstag) vom Vormonat November falsch.

Er Zeigt den 29. Montag als 30. Und den 30. Dienstag als 29.

Noch Deutlicher wird es, wenn man sich den Monat Januar 2011 ansieht.

HILFE!

Yogurtcu2004 am 13.12.2010 um 23:48
Re: Bug?
Beantworten

Ich gucke mir das mal an...

Marcel Domke am 14.12.2010 um 13:35
Re: Bug?
Beantworten

So habe den Fehler behoben! Danke. Lag an der getCalender() Funtion. Die bitte Updaten!

Marcel Domke am 14.12.2010 um 13:50
Re: Bug?
Beantworten

Anzeige weiterhin fehlerhaft.

p.ex..
Jan. 2011: Dez. 2010 endet mit FR 29.12

Fix:
Zeile16:
$LastMonthSum = date('t',mktime(0,0,0,(date('m',$date)-1),1,date('Y',$date)));
Zeile29:
$x = $LastMonthSum - $b + 1;

Wenn ich falsch liege bitte korrigieren

dante am 10.01.2011 um 13:11
demo
Beantworten

Klingt wirklich interessant, aber solchen Artikeln sollte es eine Demo geben.

Sebastian Laube am 15.01.2010 um 15:40
Re: demo
Beantworten

Kommt noch! Aber derzeit must du dich leider nur mit der Beispiel Datei vergnügen!

Marcel Domke am 16.01.2010 um 21:10
Re: demo
Beantworten

welche Beispieldatei?

Beispiel Datei

Moritz Kern am 26.03.2011 um 00:00
Re: demo
Beantworten

Die als Link seit eben eingebunden ist ;-)

Marcel Domke am 06.04.2011 um 09:11