Webhilfe.info/board

Normale Version: Timestamp in PHP
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Nachdem ich letztens Freshs Bannerscript mir angeschaut hatte dachte ich mir, ich werde mal wieder ein kleines "Tutorial" schreiben bezüglich Zeiten in PHP. Eigentlich ist es eher eine kleine Erläuterung als ein Tutorial.

Es geht um folgendes. Jeder, der z.B. mal ein Newsscript geschrieben hat kennt es, dass eigentlich immer das Datum der News gespeichert wird. Hierfür benutzen die meisten wohl diesen Befehl der in etwa so ausschaut.
PHP-Code:
$datum date("d.m.Y",time()); 
Der Inhalt der Variable $datum wird dann in die Datenbank geschrieben. Eine Ausgabe würde dann ungefähr so aussehen: "18.12.2005". Diese Anzeige ist fürs erste ok. Gehen wir einen Schritt weiter und lassen die Zeit auch speichern. Entweder wir nehmen für die Zeit eine weitere Spalte in der Datenbank oder speichern Datum und Uhrzeit zusammen in einer Spalte (auch Attribut genannt). Das würde in PHP so aussehen:
PHP-Code:
$datum date("d.m.Y - H:i",time()); 
In der Variablen steht nun ungefähr dies hier: "18.12.2005 - 15:00"
Eine solche Anzeige ist doch Klasse oder? Wink
Nun, hier stoßen wir bei bestimmten Scripten aber auf einige Probleme.

1. Der "Auftraggeber" entscheidet sich um und will statt Datum und Uhrzeit nur das Datum angezeigt bekommen wo das Jahr nur 2 Stellen hat. (also 18.12.05)
2. Wir wollen für eine bestimmte Routine lediglich die Uhrzeit haben.
3. Ich möchte das Datum etwas erweitern und als Resultat folgendes stehen haben: "Am 18.12.2005 hat *** um 15:00 Uhr folgendes geschrieben"
4. Ich möchte 2 unterschiedliche Datumsangaben vergleichen, auf Gleichheit sowie auf Unterschiedlichkeit.

Es gibt noch mehrere Probleme die Auftreten. Diese 4 Punkte zeigen aber, dass das speichern des Datums und der Uhrzeit in dem Format wie oben beschrieben nicht sehr dolle ist. Die Ausgabe des Datums und der Uhrzeit ist fest, da sie so in die Datenbank geschrieben wurde. Was nun? Wie löse ich diese Probleme ohne große Funktionen schreiben zu müssen? Die Lösung ist ganz einfach.

Es gibt in PHP eine Funktion die sich time() nennt. Mithilfe dieser Funktion, werden die Sekunden ermitteln, die vom 1.1.1970 um 0:00 Uhr bis jetzt vergangen sind. Derzeitig sind es ungefähr 1134914592 Sekunden. Diese Zahl erhöht sich also pro Sekunde immer um 1. Sollte verständlich sein. Wink
Diese Zahl speichern wir nun in unserer Datenbank. Doch was nun? Was soll ich mit dieser Zahl anstellen? Auch diese Frage ist einfach gelöst. Die Funktion die man verwendet hat man bereits vorher schon unbewusst verwendet. Die Funktion lautet date() (siehe oben).
Wir können unser Datum nun anzeigen lassen wie wir es wollen. Hier ein Beispiel:
PHP-Code:
$datum date("Am d.m.Y hat *** um H:i Uhr",$zahl_aus_datenbank); 
Wir können nun jederzeit die Ausgabe des Datums und der Uhrzeit ändern. Das geht daher, weil wir nicht die Formation des Datums und der Uhrzeit speichern sondern lediglich die Sekunden.

Also nochmal im Zusammenhang:
Wir speichern die derzeitige Zeit im time() in der Datenbank.
Wir geben unser Datum mit der Funktion date() aus.

Dadurch das wir die Sekunden speichern, ist es möglich, Datum und Uhrzeit zweier Ereignisse zu vergleichen. Gehen wir also mal davon aus, dass ein User um 1000 (eine geringe Zahl um das Beispiel besser erklären zu können) einen Eintrag in einem Forum getätigt hat. Der User muss 2 Minuten warten, ehe er erneut einen Eintrag erstellen darf.
Wie funktioniert das?
Das Ganze würde dann so aussehen:
PHP-Code:
$db_datum $datum_aus_datenbank;
if(
$db_datum > (time()-120))
  
//user darf nicht posten
else
  
//user darf wieder posten 
Was haben wir hier gemacht? Wir haben überprüft, ob die Zahl in der Datenbank größer ist als die derzeitige Zeit minus 2 Minuten (1 Minute entspricht 60 Sekunden, also entsprechen 2 Minuten = 120 Sekunden). Ist die Zahl in der Datenbank größer, so sind noch nicht 2 Minuten vergangen, ist sie kleiner, so sind min. 2 Minuten vergangen und der User darf wieder posten.

Es gibt aber noch eine weitere Funktion mit der wir die Sekunden eines bestimmten Datums errechnen können. Diese Funktion schimpft sich mktime.
Gehen wir davon aus, dass wir die Sekunden haben wollen, die vom 1.1.1970 - 0:00 Uhr bis zum 20.01.2010 - 05:45 Uhr vergangen sind. Wir müssen dazu folgendes der Funktion mitteilen.
PHP-Code:
echo mktime(5,45,0,1,20,2010); 
Somit erhalten wir die Sekunden. Die Funktion benötigt als ersten Parameter die Stunde, dann die Minute, Sekunde,Monat,Tag und dann das Jahr. Beachtet hier bitte, es müssen Zahlen eingegeben werden also als Monat "Januar" einzutragen bringt nichts. Auch bringt es nichts, als Tag "05" reinzuschreiben. Bei einstelligen Tagen darf keine 0 vorangesetzt sein.


Das war mein kleiner Lehrgang zu den Zeiten in PHP. Macht euch die Mühe und verwendet einfach mal die Timestamps (Begriff für die Sekunden seit dem 1.1.1970) und schaut, welche Vorteile dies bringt.

Ich hoffe, ich konnte hiermit einigen weiterhelfen und vor großen Problemen fernhalten. Wink

PS: Wenn ihr irgendwo mal seht, dass die Einträge in Gästebüchern oder sonst wo das Datum 1.1.1970 haben, dann steht bei denjenigen Einträgen die 0 bei der Zeit. Meistens passiert dies bei Umbauten oder Fehlern in Scripten.
Referenz-URLs