Fred mag ihn. Paul findet ihn auch ganz toll. Und Markus ist ebenfalls ein riesen Fan davon. Nebenbei bemerkt, der PHP Blogger mag ihn auch. Um was es geht? Den Unix-Timestamp!
Jeder weiß, das es ein riesen Integer ist, der immer größer wird. So groß, dass er irgendwann mal eine Integer-Variable sprengen könnte. Und das passiert bei Systemen, die Integer in 32 Bit abspeichern genau am 19. Januar 2038.
Einfach haben es Programme, die interpretiert werden - hier muss einfach nur der Interpreter angepasst und ausgetauscht werden. PHP Applikation sollten also nochmal mit einem blauen Auge davon kommen, denn 64 Bit Systeme sind ja jetzt schon im Einsatz und bis 2038 werden es hoffentlich noch viel mehr werden.
Aufgeschoben ist in diesem Fall aber leider nicht aufgehoben, denn laut dem Mooreschen Gesetz steht man spätestens 2055 wieder vor dem selben Problem. Und das ist bisher beeindruckend genau.
Aber warum wird der sogenannte Zeitstempel so gerne verwendet? Eine Übersicht:
- Das Datumsformat ist einfacher für den Computer zu handeln.
- Berechnungen, gerade von Zeitdifferenzen sind super einfach.
- Schaltjahre, Sommer- und Winterzeit müssen nicht berücksichtigt werden.
Einziger Nachteil ist die schlechte Lesbarkeit für Menschen. Das betrifft meiner Meinung aber noch Datenbankinhalte, denn der Timestamp wird häufig nur dann eingesetzt, wenn mit dem Wert noch gerechnet wird. Für die Anzeige kann man Timestamps mit Hilfe von PHP Funktionen leicht in schön formatierte “Menschenzeit” umrechnen. Und wenn Dinge rausgeschrieben werden, damit Menschen sie lesen (wie etwa Logfiles) dann schreibt man gleich ein schickes Format raus.
Wer Wert darauf legt, das die Datenbankinhalte auch im DB Admintool und SQL Dumps gut lesbar sind, sollte stattdessen je nach Bedarf auf die Datentypen Datetime, Date bzw. Time zurückgreifen. Mit den Date Funktionen von PHP kann so kodierte Daten schnell in einen Timestamp konvertieren ;) Naja, das wäre aber auch keine Lösung…
Bei zeitkritischen Transaktionen würde ich auf jeden Fall keinen Zeitstempel verwenden. Oft werden Transaktionen auf die Ausführungszeit hin überprüft und in Intervallen neu gestartet, wenn die Ausführungszeit <= 0 ist. Auf diese Weise können vorzeichenbasierte Integer schnell zu einer Endlosschleife führen.
Denkt auf jeden Fall mal drüber nach, ob ihr nicht den einen oder anderen Timestamp durch eine Alternative ersetzen könnt…

















