Der UNIX-Timestamp (Unixzeit) ist ein Wert (INT), der die seit dem 01.01.1970 00:00:00 UTC vergangenen Sekunden (ohne Schaltsekunden) enthält. Da UTC aber erst am 01.01.1972 eingeführt wurde und die Schaltsekunden von UTC und GMT unterschiedlich waren, ist die Benutzung der Unixzeit für Daten vor 1972 nur bedingt geeignet.
Neben dieser Problematik ist weiterhin anzumerken, dass viele Computersysteme UNIX-Timestamps in einem vorzeichenbehafteten Intergerwert (SIGNED INT) speichern, was einem Wertebereich von etwa +/-68 Jahren seit dem Beginn der Unixzeit entspricht. Bei diesen Systemen ist somit keine sinnvolle Verwendung dieses Wertes vor dem 13. Dezember 1901 20:45:52 UTC und nach dem 19. Januar 2038 um 3:14:08 UTC möglich.
Der MySQL-Timestamp hingegen unterscheidet sich vom Aufbau her grundsätzlich. Dieser Wert wird in der Form YYYY-MM-DD HH:MM:SS gespeichert (oder eben 2007-05-25 12:17:00 zum Zeitpunkt des Schreibens dieses Artikels). Dies scheint eher einem DATETIME-Typen zu entsprechen. Ein
jedoch würde die Ausgabe 20070525121700 hervorbringen und somit die Natur dieses Spaltentyps offenbaren. Der Wert lässt sich also durchaus im Klartext erkennen. Allerdings wird dies dadurch nicht einfacher, wenn man bedenkt, dass auch PHP den UNIX-Timestamp verwendet und sich mal exemplarisch die Funktion mktime() anschaut. Allerdings kann MySQL sehr wohl mit Unixzeit umgehen …
Wenn man mit dem eingeschränkten Wertebereich der Unixtime leben kann, besteht die Möglichkeit in den MySQL-Tabellen einen SIGNED INT(11) zu definieren, um die PHP-Timestamps direkt einfügen und sich die ganze Umformerei der Datumswerte sparen zu können. Ansonsten ist es sicher auch von Vorteil, sich mal die MySQL-Funktion unix_timestamp() anzusehen.
$ts = 0;
echo date ("d.m.Y H:i:s", $ts) . "<br />\n";
$ts = 2147483647;
echo date ("d.m.Y H:i:s", $ts) . "<br />\n";
# Problemfaelle
$ts = -2147483649;
echo date ("d.m.Y H:i:s", $ts) . "<br />\n";
$ts = 2147483648;
echo date ("d.m.Y H:i:s", $ts) . "<br />\n";
# GMT +1 ist noch ein anderes Thema
$ts = mktime (21, 45, 51, 12, 13, 1901);
echo date ("d.m.Y H:i:s", $ts) . "<br />\n";
$ts = mktime (4, 14, 8, 1, 19, 2038);
echo date ("d.m.Y H:i:s", $ts) . "<br />\n";
Have fun!