Wie die meisten Entwickler habe ich jahrelang bei der Verwaltung von Datums- und Zeitangaben in PHP/MySQL-Projekten einfach Unix-Timestamps benutzt. Ein Unix-Timestamp gibt die vergangenen Sekunden seit dem 1. Januar 1970 als Integer-Wert an. Der Vorteil dieses Formats ist, dass man es ohne Konvertierungsprobleme in ein Integer-Feld der Datenbank speichern kann und relativ leicht damit arbeiten kann.
Um beispielsweise den Unix-Timestamp von heute vor genau einer Woche zu errechnen, lässt man sich vom System den aktuellen Unix-Timestamp geben und subtrahiert die vergangenen Sekunden seit dem gewünschten Datum:
$jetzt = time(); $letzte_woche = $jetzt - (60*60*24*7);
Dieses Verfahren hat jedoch auch einige Nachteile:
Als Alternative gibt es in MySQL das Datetime-Format: Diese Felder speichern Datums- und Zeitinformationen und stellen diese in einem für Menschen lesbaren Format dar. Des Weiteren stellt MySQL diverse Funktionen zur Verfügung, um bequem mit diesen Feldern arbeiten zu können.
Das Einfügen in ein Datetime-Feld ist einfach: Um das aktuelle Datum einzufügen braucht man nichts weiter zu tun, als die MySQL-Funktion NOW() zu nutzen. Würde man also das aktuelle Datum in eine Tabelle einfügen wollen, so würde dies so aussehen:
INSERT INTO `benutzer` (`id`,`anmelde_datum`) VALUES ( 4, NOW() );
Um Datensätze anhand der Daten eines Datetime-Felds zu durchsuchen, muss man lediglich mit einem Datum im Format YYYY-MM-DD vergleichen. Will man beispielsweise wissen, welche Nutzer sich vor dem 10.12.2003 angemeldet haben, würde man dies so tun:
SELECT * FROM `benutzer` WHERE `anmelde_datum` < '2003-12-10';
Besonders angenehm wird das Arbeiten mit dem Datetime-Feld, wenn man beispielsweise wissen möchte welche Benutzer sich in den letzten 2 Tagen angemeldet haben:
SELECT * FROM `benutzer` WHERE `anmelde_datum` > NOW() - INTERVAL 2 DAY;
Auch das Ausgeben eines Datetime-Feldes in einem gewünschten Format ist mit MySQL möglich. Hierzu muss man lediglich die DATE_FORMAT()-Funktion bemühen. Das Formatieren funktioniert mit ''Wildcards'' (wie bei der PHP-Funktion date()).
| %c | Month, numeric (0..12) |
| %H | Hour (00..23) |
| %h | Hour (01..12) |
| %I | Hour (01..12) |
| %i | Minutes, numeric (00..59) |
| %j | Day of year (001..366) |
| %k | Hour (0..23) |
| ... |
Nehmen wir also an, wir möchten ein Datetime-Feld in dem in Deutschland üblichen Format DD.MM.YYYY (sprich: 15.10.2008) ausgeben. Die SQL-Abfrage hierzu ist:
SELECT `id`, DATE_FORMAT(`anmelde_datum`,'%d.%c.%Y') FROM `benutzer`;
Hat man sich erst einmal an die Verwendung des Datetime-Formats gewöhnt, ist es schwer vorzustellen, wie man ohne arbeiten konnte. Vor allem wenn man unter Zeitdruck steht und „mal eben“ in der Datenbank herumwerkeln muss, ist das lesbare Format von großer Hilfe.
Zusätzliche Informationen finden sich unter dem folgenden externen Link: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html.