Wer ein bisschen mit PHP gearbeitet hat, ist bestimmt schonmal über die Timestamps gestolpert. In diesem Tutorial beschäftigen wir uns ein bisschen mit dieser speziellen Zeitangabe. Ich werde dabei nicht wirklich in die Tiefen der Materie vorstoßen, sondern einfach ein paar Denkanstöße geben. Das Tutorial eignet sich so vor allem für Anfänger. Als fertiges Produkt des Tutorials haben wir dann eine PHP Datei welche ein Datum (optional auch Zeit) automatisch in einen Timestamp umrechnet.
I. Erklärung
Die offizielle Definition im PHP Manual (
php.net) lautet:
« Die seit Beginn der UNIX-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden »
Ein Timestamp besteht also aus einer ganzen Zahl welche sich mit jeder verstrichenen Sekunde um 1 erhöht. Wenn ich diese Zeile schreibe, ist der Timestamp genau 1069748525. Am 1. Januar des Jahres 1970 wäre der Timestamp also 0 gewesen.
II. Wozu Timestamps?
Das fragt ihr euch wahrscheinlich nur wenn ihr noch nie ein Script mit Datumsfunktionen geschrieben habt. Timestamps sind zwar für unser menschliches Hirn zu abstrakt um ein Datum daraus zu erkennen, eignen sich aber hervorragend um mit Daten zu jonglieren.
Schon mal probiert einen Countdown in PHP zu basteln? Mit Timestamps ein Kinderspiel. Sortieren nach Datum? Ohne Timestamps die reinste Qual.
Da Datumsfunktionen oftmals reine Mathematik sind, ist es viel einfacher mit ganzen Zahlen zu arbeiten als mit einem Konstrukt aus Tagen, Monaten und Jahren.
III. Funktionen
Die wichigsten Funktionen welche wir benutzen um mit Timestamps zu arbeiten sind:
time() - Gibt den aktuellen Timestamp zurück
date() - Erzeugt aus einem Timestamp ein formatiertes Datum.
mktime() - Erzeugt aus verschiedenen Angaben wie Tag, Stunde, Sekunde, Jahr einen Timestamp.
Die Syntax dieser Funktionen findest du (wie bei allen PHP Funktionen) unter php.net
IV.Anwendungen
Wo können wir nun Timestamps verwenden? Ein Beispiel wäre sicher der klassische Countdown:
|
PHP-Code:
|
|
//Timestamp für den 17. Dezember 2003 erzeugen
$timestamp_event = mktime(0,0,0,12,17,2003 );
//Sekunden errechnen welche noch verbleiben
$seconds_left = $timestamp_event - time();
echo “$seconds_left bis zum “.date(“d.m.Y”, $timestamp_event);
|
Ein weiteres Beispiel ist sicher das Sortieren von Datensätzen, z.B. in einer MySQL Datenbank. Einfach eine Spalte mit Timestamps zu den entsprechenden Einträgen anlegen und fortan mit folgendem Befehl nach Datum (Neuste zuerst) geordnet abzufragen:
SELECT * FROM gb_entrys ORDER by entry_timestamp desc
V.Timestamp errechnen
Im Folgenden noch der Quellcode zu einem kleinen Script welches den Timestamp eines im Formular eingegebenen Datums errechnet.
|
PHP-Code:
|
|
<?php
/* Date to Timestamp converter */
//FormularAusgabe: Gibt das Formular mit Werten (falls vorhanden) aus
function outputForm($timestamp=0)
{
echo "<h2>Timestamp errechnen</h2>\n";
if(!empty($timestamp)){
echo "<p>Errechneter Timestamp: ".$timestamp."</p>\n";
}
echo "<p>Geben Sie im untenstehenden Formular das Datum ein um den dazugehörigen Timestamp zu erhalten.</p>\n";
echo "<form name=\"timestamp\" method=\"post\">\n";
echo "<table>\n<tr>\n<td>Datum</td>\n<td><input type=\"text\" maxlength=\"10\" name=\"date\" value=\"";
if(!empty($timestamp)){
echo date("d.m.Y",$timestamp);
}
echo "\"></td>\n<td></td>\n</tr>\n";
echo "<tr>\n<td></td>\n<td>Format: TT.MM.JJJJ</td>\n<td></td>\n</tr>";
echo "\n<tr>\n<td>Zeit</td>\n<td><input type=\"text\" maxlength=\"5\" name=\"time\" value=\"";
if(!empty($timestamp)){
echo date("H:i",$timestamp);
}
echo "\"></td>\n<td>(optional)</td>\n</tr>\n";
echo "<tr>\n<td></td>\n<td>Format: HH:MM</td>\n<td></td>\n</tr>\n";
echo "<tr>\n<td></td>\n<td><input type=\"submit\" value=\"convert!\"></td>\n<td></td>\n</tr></table>\n</form>\n";
}
if(empty($_POST['date'])) {
outputForm();
}
else {
//Variablen definieren
$datum = $_POST['date'];
$time = $_POST['time'];
$datum_werte = explode(".",$datum);
$zeit_werte = explode(":",$time);
//Timestamp generieren
$timestamp = mktime($zeit_werte[0], $zeit_werte[1], 0, $datum_werte[1], $datum_werte[0], $datum_werte[2]);
outputForm($timestamp);
}
?>
|
(Echo Befehle könnte man zusammenfassen, Ich weiss. Ich habs der Zeilenlänge zuliebe gesplittet).
Das Script sollte eigentlich relativ einfach zu verstehen sein. Zu Beginn des Scripts definieren wir eine Funktion welche ein Formular ausgibt. Als Parameter wird lediglich ein Timestamp (optional) erwartet. Falls dieser Timestamp übergeben wird, erscheint dieser über dem Formular und in den Formularfeldern werden die Angaben vom eben diesem Timestamp errechnet.
Soweit so gut. Nachdem die Funktion abgeschlossen ist wird mit einer if-Abfrage geprüft ob $_POST['date'] einen Wert enthält, falls nein, wird das Formular ausgegeben (Funktionsaufruf) andernfalls wird der Timestamp errechnet und erst dann das Formular ausgegeben.
Wenn ihr die Datumsfunktionen kurz angeschaut habt (siehe Punkt III.) Sollte die Errechnung des Datums eigentlich selbstredend sein.
Danke fürs Lesen!
antihero