Anzeige
Tutorialbeschreibung

Zeitabhängige Inhalte mit date() und Timestamps

Zeitabhängige Inhalte mit date() und Timestamps

Ziel dieses Workshops: Zeitabhängige Inhalte generieren, inklusive kurzem Exkurs in die Arbeitsweise von date() und Timestamps


Einleitung: Viele sehen PHP nur als eine Art Bindeglied zwischen Webseite und Datenbank. Es generiert die News und das Gästebuch, gewährt Nutzern Zugang zu bestimmten Bereichen oder erlaubt die einfache Einbindung redundanter Inhalte. Dass es dabei auch sinnvoll sein kann, andere umfeldbedingte Daten, wie den Browser des Nutzers, die verweisende Seite oder einfach nur die Uhrzeit zu beachten, erkennen die wenigsten.


Deshalb möchte ich euch kurz und bündig beschreiben, wie man auf die Uhrzeit, den Wochentag oder gar Monat reagieren kann, in dem der Benutzer eure Seite aufruft. Let’s rock.

Schritt 1:
Kein echter Schritt, sondern eine Kurzabhandlung über Zeitstempel und deren Nutzen in PHP. Wer sich also damit schon auskennt, kann direkt in Schritt 2 rutschen.

Zuallererst sollten wir klären, was denn nun dieser sagenumwobene Timestamp/Zeitstempel ist. Wikipedia meint:

Ein Zeitstempel (engl.: timestamp) ist ein Wert in einem definierten Format, der einem Ereignis (beispielsweise dem Senden oder Empfangen einer Nachricht, der Modifikation von Daten u. a.) einen Zeitpunkt zuordnet.

 

Das heißt also, wir können mithilfe eines Timestamps exakt festlegen, wann etwas passiert ist oder passieren wird. In der Informatik wird dazu tradiitionell der UNIX-Timestamp benutzt, der die Sekunden seit dem 1.1.1970 zählt (echte Nerds kennen übrigens den Timestamp ihres Geburtsdatums auswendig…).

In PHP können wir uns mit der Funktion time() den derzeitigen Stand anschauen. Wer will, erstellt sich eine klitzekleine PHP-Datei mit diesem Inhalt:
<?php
     
echo time();
?>

Zum Zeitpunkt dieses Tutorials ist er bei 1162134660.  Was nützt uns nun aber diese Information?

Nun, zum einen können wir bei unseren Freunden prahlen, dass wir die vergangenen Sekunden seit 1970 kennen, zum anderen können wir aber aus dieser riesigen Zahl berechnen, welcher Tag, welche Stunde, Minute, gar Sekunde gerade ist. Natürlich kann man auch einen vergangenen Zeitstempel nehmen, ihn mit jetzt verrechnen und so die Anzahl der Tage zwischen zwei Daten berechnen. Andersrum funktioniert das ebenfalls (wieviele Tage noch bis Weihnachten usw.).
Mit diesem Wissen gefüttert kommen wir zu einem sehr einfachen Beispiel in PHP.

Schritt 2:
Als Beispiel habe ich eine tageszeitabhängige Begrüssung gewählt. Nicht vergessen: eurer Fantasie sind beim Spiel mit zeitdynamischen Inhalten kaum Grenzen gesetzt.
Wir beginnen mit dem üblichen <?php und rufen gleich die wichtigste und einzige Funktion auf, die nötig ist.

<?php
     $uhrzeit
= date("G");

Die Funktion date() errechnet anhand eines Timestamps (ohne Übergabe eines spezifischen wird der aktuelle genommen) verschiedenste Werte. Mit G lassen wir uns die Stunde im 24h-Format ohne führende Nullen anzeigen. Die Funktion kann auch komplexere Dinge zurückgeben:

     echo date("Heute ist der d. m. Y. Dieser Monat hat t Tage!");
     
//gibt aus: Heute ist der 29. 10. 2006. Dieser Monat hat 31 Tage!

Eine komplette Auflistung gibt es bei php.net.

Schritt 3:
In meinem Beispiel kann ich nun also mit einer ganz einfachen if-Abfrage bestimmen, wann der Benutzer sich diese Seite anschaut und entsprechend reagieren.
     if($uhrzeit>=6 && $uhrzeit <= 9)
      {
       echo
"<p>Guten Morgen!</p>";
      }
      else
      {
        if(
$uhrzeit>9 && $uhrzeit<19)
        {
            echo
"<p>Guten Tag!</p>";
        }
        else
        {
            if(
$uhrzeit>=19 || $uhrzeit<6)
            {
              echo
"<p>Guten Abend!</p>";
            }
        }
      }
?>
Das heißt, jeder Besuch zwischen 6 und 9 Uhr wünscht dem Besucher einen guten Morgen usw.

Gesamter Code:
Auch wenn es nicht viel ist, hier nochmal der gesamte Code:

<?php
     $uhrzeit
= date("G");
     if(
$uhrzeit>=6 && $uhrzeit <= 9)
      {
       echo
"<p>Guten Morgen!</p>";
      }
      else
      {
        if(
$uhrzeit>9 && $uhrzeit<19)
        {
            echo
"<p>Guten Tag!</p>";
        }
        else
        {
            if(
$uhrzeit>=19 || $uhrzeit<6)
            {
              echo
"<p>Guten Abend!</p>";
            }
        }
      }
?>

Nachbemerkungen:
Was soll ich sagen? Das war es auch eigentlich schon. Wenn man jetzt die Ausgaben von date() geschickt kombiniert, kann man mit dieser Methode dutzende Anwendungsmöglichkeiten finden.

Warum den Benutzer nicht am Morgen mit einem hübschen Sonnenaufgang im Header begrüßen? Warum nicht nachts ein augenfreundlicheres Stylesheet einbinden? Warum nicht erst ab 22 Uhr bedenkliche Inhalte ausgeben lassen? Warum nicht jeden Sonntag zwischen 9 und 12 Uhr einen kleinen Bibelspruch irgendwo einblenden? Warum nicht am eigenen Geburtstag jedes Jahr automatisch eine riesige Nachricht alá „Happy Birthday to me!“ auf die eigene Webseite bringen?

Alles kein Problem mit date() und den Timestamps.

Falls du eine sehr gute Idee zur Anwendung hast, kannst du sie ja gern in einem Kommentar kurz erläutern!


Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von mrkrabbe
  • 02.09.2014 - 10:08

Für den jeweiligen Zweck ausreichend und gut erklärt. Danke!

Portrait von TechMac
  • 06.08.2012 - 20:43

Übersichtlich und leicht zu verstehen

Portrait von Silentbike
  • 10.01.2011 - 00:27

gut gemacht einfach und übersichtlich! Danke

Portrait von BCBMB
  • 17.12.2010 - 15:26

Erklärt gut und strukturiert die Grundfunktionen.

Besten Dank

Portrait von Muskelbiber
  • 04.05.2010 - 20:28

gut erklärt ;)
nette funktion^^

Portrait von phprai
  • 22.03.2010 - 19:09

Ich möchte in Abhängigkeit vom Datum monatlich eine neue *.scv Wetter-Datenbankdatei erstellen. Insofern nicht ganz das was ich gesucht habe. Werde das Skript aber sicherlich auf meine Bedürfnisse anpassen können.

Portrait von Franzi_Jump
  • 22.03.2010 - 11:43

die Grundlagen sind damit zum Thema date() sicherlich abgedeckt.
Werde mich demnächst mal an eine Erweiterung dieses Tutorials machen, beschäftige mich derzeit auf Arbeit damit.
Danke für den Einstieg :) sehr hilfreich um einzusteigen.

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 19.01.2009 - 21:22

nette sache die du hier vorgestellt.

zum vorschreiber.

du meintest sicherlich elseif, würde man elseof nehmen würde nur ne fehlermeldung erscheinen

Portrait von prito
  • 03.10.2007 - 00:43

oww.. schon soo alt? ich hab das datum (noch) nicht gesehen..
aber ich habe es schon hingekriegt mit switch and break.
wollte rotierender Text haben, so dass jeden Tag ein anderer Text erscheint..

Portrait von Duddle
  • 27.09.2007 - 15:00

Naja, ein Jahr später ist das Ding nicht mehr dort gehostet. Aber prinzipiell brauchst du nur Modulo mit der Wochennummer kombinieren und hast den wöchentlichen Wechsel.

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 30.07.2007 - 19:56

ich würde das ganze in mit elseof machen...das spart 2 Zeilen^^

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 18.05.2007 - 20:40

eine einfache und effektife lösung, danke

Portrait von Fyrblord
  • 31.01.2007 - 22:35

danke hat mit geholfen

Portrait von the_real_didi
  • 07.12.2006 - 15:24

Das tutorial gefällt mir. Mich würde nur noch interessieren, wie ich denwert in ne datenbank bekomme. das funzt bei mir irgendwie nicht.

Portrait von Duddle
  • 10.12.2006 - 10:56

Das kommt auf deine DB an. Bei MySQL beispielsweise gibt es die Datentypen DATETIME und TIMESTAMP. Beide haben laut Doku ( http://dev.mysql.com/doc/refman/5.0/en/datetime.html ) die Form YYYY-MM-DD HH:MM:SS also beispielsweise 2006-12-10 10:52:57.
Das heisst, entweder gibst du deine date()-Daten entsprechend aus oder du nimmst einfach eine Relation mit dem Datentyp INT und trägst den UNIX-Timestamp unformatiert rein. Den musst du dann aber wieder für deine Scripts umrechnen.

Portrait von XBitz
  • 25.11.2006 - 17:22

Genau danach hab ich gesucht! Dynamischer kann eine Seite nicht sein ;)

Portrait von prito
  • 27.09.2007 - 11:18

hmm... ich sehe hier kein script.
kann mir bitte jemand helfen?

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 07.11.2006 - 20:36

WOW - sogar ein Script! :)
Ganz herzlichen Dank an Dich!

Wenn ich es mal eingebaut habe (ist für einen Bekannten), schicke ich dir den Link.

Schöne Grüße Merlinator

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 07.11.2006 - 19:16

Vielen Dank!
Mich interessiert noch, ob ich auf diese Weise zwei HTML-Seiten jeweils im Wechsel anzeigen kann? Eine Woche lang Seite X und dann eine Woche lang Seite Y...

Schöne Grüße Merlinator

Portrait von Duddle
  • 07.11.2006 - 20:12

Jap, mit der Kalenderwoche und etwas Mathe geht das auch. Kann hier leider kein PHP einfügen, deshalb hab ich es als Textdatei mal hochgeladen:<br>
<br>
<a href="http://mitglied.lycos.de/duddle2k/scripts/kalenderwoche.txt"> kalenderwoche.txt</a> [mitglied.lycos.de]<br>
<br>
<br>
Duddle

x
×
×