Im Artikel Adventskalender erstellen – Die Imagemap habe ich gestern erklärt, wie ich bei meinem Adventskalender den HTML-Teil gestaltet habe. In diesem Artikel geht es jetzt um die Datumsabfrage, anhand der entschieden wird, was ein Besucher an welchem Tag zu sehen bekommt.
Zeitzone definieren
Damit das Türchen eines Adventskalenders für alle Besucher gleichzeitig offen ist, habe ich zuerst mal die gültige Zeitzone definiert. Dafür habe ich den PHP-Befehl date_default_timezone_set() verwendet:
date_default_timezone_set('Europe/Berlin');
Datum ermitteln
Für die Ermittlung des Datums habe ich die Funktion date() benutzt. Den aktuellen Tag finde ich mit
$heute = date("Ymd");
heraus und ordne ihn einer Variable zu. Das Kürzel „Ymd“ steht dabei für das Jahr, den Monat und den Tag (z. B. 20101206). Wichtig hierbei ist, dass zwischen den Angaben keine Punkte stehen dürfen, sonst können nachher die verschiedenen Daten nicht miteinander verglichen werden.
Die Funktion mktime() gibt den Unix-Timestamp für ein Datum zurück. Dieser enthält alle Sekunden, die seit dem 01.01.1970, dem Geburtsdatum von Unix, vergangen sind. Als Argument muss man nacheinander die Stunde, die Minute, die Sekunde, den Monat, den Tag und das Jahr des gewünschten Datums angeben. Für den 6. Dezember 2010 sieht das so aus:
mktime(0, 0, 0, 12, 6, 2010);
Da ich für den Adventskalender ja nur das Datum und nicht die Uhrzeit benötige, habe ich diese auf 0:00:00 Uhr gesetzt. Den von mktime gelieferten Timestamp wandle ich nun wieder mit der date-Funktion in das gleiche Format um, in dem ich schon den aktuellen Tag gespeichert habe und weise ihn auch wieder einer Variable zu:
$adventstag=date("Ymd", mktime(0, 0, 0, 12, 6, 2010));
Die Datumsabfrage
Das war es dann auch schon fast. Jetzt kann ich bequem ein beliebiges Adventskalenderdatum mit dem heutigen Datum vergleichen und dementsprechend den dazu passenden Inhalt ausgeben.
Wenn die Seite vor dem Adventskalenderdatum aufgerufen wird…
if ($adventstag>$heute)
lasse ich einen entsprechenden Hinweistext anzeigen:
echo "<p>Sie sind leider etwas zu früh dran.</p>";
Wenn die Seite am richtigen Tag oder später aufgerufen wird…
if ($adventstag<=$heute)
lasse ich das Tagesrätsel anzeigen.
Wenn das aktuelle Datum mit dem Adventskalenderdatum genau übereinstimmt…
if ($adventstag==$heute)
blende ich zusätzlich noch das Teilnahmeformular ein. Somit ist sichergestellt, dass eine Teilnahme nur am richtigen Tag möglich ist.
Der komplette Code sieht dann ungefähr so aus:
date_default_timezone_set('Europe/Berlin');
$heute = date("Ymd");
$adventstag=date("Ymd", mktime(0, 0, 0, 12, 6, 2010));
if ($adventstag>$heute)
{
echo "<p>Sie sind leider etwas zu früh dran.</p>";
}
if ($adventstag<=$heute)
{
// Rätsel anzeigen lassen
}
if ($adventstag==$heute)
{
// Teilnahmeformular anzeigen lassen
}
Eigener Adventskalender?
Habt ihr schon einen eigenen Adventskalender erstellt? Seid ihr genauso wie ich vorgegangen oder habt ihr die Sache anders angepackt? Schreibt doch bitte etwas in den Kommentaren dazu.
Hallo,
bin gerade über diese Seite gestolpert. Bei meinen Adventskalendern habe ich diese Datumsabfrage bzw. die Abfrage, ob ein Türchen geöffnet werden darf oder nicht etwas anders gelöst.
Habe einfach abgefragt ob es Dezember ist (wenn nicht alle Türchen geschlossen). Wenn Dezember ist dann noch für jedes Türchen einfach die Abfrage if($aktuellerTag >= $tuerchenTag) [$aktuellerTag ist dabei = date(„d“,$timestamp) und $tuerchenTag ist natürlich die Türchennummer] und schwupps gings auf oder blieb zu. So braucht man die komplette Unix-Timestamp garnicht mit mktime() zu entschlüssen; die Uhrzeiten sind bei einem 24 Stunden Tag egal.
Außerdem kann man das Script wenn man es richtig macht jedes Jahr wieder benutzen. In deinem Fall hätte ich vielleicht sogar für alle verschiedenen Rätselarten „Rohlinge“ geschaffen, die sich selbst mit den jeweiligen Inhalten füllen. Diese Inhalte kann man dann bei Bedarf (z.b. ein Jahr später) einfach ersetzen und neu definieren, ohne groß an den Code zu müssen.
Gruß Nick.
So kann man die Datumsabfrage eines Adventskalenders natürlich auch machen 🙂
Ich habe beim Programmieren natürlich schon darauf geachtet, dass ich den Code jedes Jahr wieder verwenden kann. Bei den Rätseln ist das sowieso nicht schwierig, da es oft schon reicht, ein Bild auszutauschen und/oder den Text zu ändern.
Sofern man alte Türchen geöffnet lassen will bietet sich eine While- Schleife oder For an 😉
Hallo,
wirklich eine schöne Seite.
Dennoch habe ich ein Problem.
Für meine Internetseite möchte ich einen Adventskalender programmieren. Ich habe mich dabei an diese Anleitung gehalten, denn ich bin ein ziemlicher Anfänger was das Programmieren angeht. Teil 1 hat auch wunderbar funktioniert.
Aber die Datumsabfrage bekomme ich einfach nicht hin.
Es wäre toll, wenn jemand mir einen kompletten Script schicken könnte und auch sagt, wie ich den einbauen muss. Denn wenn ich den von dieser Seite nehme, passiert gar nichts und der Script wird in schwarzer Schrift neben dem eigentlichen Adventskalender angezeigt.
Mit freundlichen Grüßen,
Hallo sehr geehrte Damen und Herren,
wollte mal nach Fragen wie sie die Php datei mit der html datei verbunden haben.Habe unter denn einselnen Kästchen denn html link zu überraschung hinterlegt und jetzt fehlt mir noch das mit der Datum abfrage wo muss ich die fertige php datei rein programmieren das das bei der Datum abfrage funktioniert?.
Schreiben sie mir bitte zurück
Mit freundlichen Grüße
Qutlaw-Hosting
Man kann einfach die gesamte Datei in *.php umbenennen und den PHP-Code dort einbinden.
Ich habe gerade ein anderes Projekt programmiert und dabei für jeden Tag bis zum 24. ein Array angelegt.
Das enthält einen Titel, einen kleinen Vorschautext, das jeweilige Datum als string (z.B. 2015-12-06), den Tag (z.B. 6), eine id für die CSS-Klasse und eine URL, auf die der Tag verlinkt werden soll.
Interessant, dass es für Adventskalender tatsächlich noch keine kostenlose (Open Source) Lösung gibt, die man einfach herunterladen kann.
Danke für den Tipp mit der Zeitzone, hätte ich bei mir fast vergessen 😉