PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

DATE-Datenbankspalten

10. Februar 2020
  1. Home
  2. »
  3. MySQL Tutorial
  4. »
  5. DATE-Datenbankspalten

Um eine Datumsangabe, beispielsweise den Registrierungszeitpunkt eines Benutzers, in der MySQL-Datenbank abzuspeichern hast du verschiedene Möglichkeiten. Zum einen kannst du ein INT-Feld definieren und dann einen Timestamp mittels time() erzeugen und in der Datenbank abspeichern. Meine persönliche Empfehlung ist aber die existenten Typen von MySQL zu verwenden .

Inhaltsverzeichnis

  • 1 MySQL Typen für Datum und Zeit
  • 2 Datum per PHP eintragen
  • 3 Datum formatieren
    • 3.1 Datum in PHP formatieren per strototime()
    • 3.2 Datum in PHP formatieren per DateTime
    • 3.3 MySQL Timestamp formatieren
    • 3.4 MySQL Datetime formatieren

MySQL Typen für Datum und Zeit

Für Datum- und Zeitangaben existieren in MySQL die Feldtypen TIME, DATE, DATETIME und TIMESTAMP.

TIME lässt sich für reine Zeitangaben nutzen. Das Format ist HH:MM:SS und kann Werte zwischen -838:59:59 und 838:59:59 beinhaltet. Damit lassen sich also nicht nur Zeitpunkte während eines Tages bestimmen, sondern auch längere Zeitspannen, z.B. für 48 Stunden entsprechend 48:00:00.

DATE wird für reine Datumsangaben verwendet und Einträge werden im Format 'YYYY-MM-DD' abgespeichert. Felder mit entsprechendem Typ können Werte zwischen 1000-01-01 und 9999-12-31 abspeichern.

TIMESTAMP und DATETIME speichern beide Datums und Zeitangaben im Format 'YYYY-MM-DD HH:MM:SS' ab. DATETIME können Werte zwischen '1000-01-01 00:00:00' und '9999-12-31 23:59:59' abspeichern, während TIMESTAMP Werte zwischen '1970-01-01 00:00:01' UTC und '2038-01-19 03:14:07' UTC abspeichern kann. Der unterschied zwischen den beiden Typen ist nicht ganz leicht zu verstehen. DATETIME gibt ein Datum an, wie man diese in einem Kalender bzw. an einer Wanduhr finden kann. Bei TIMESTAMP wird die Zeitzone berücksichtigt und bei der Abspeicherung wird die Zeit entsprechend zur koordinierten Weltzeit (UTC) umgerechnet. Wenn eure Anwendung also ggf. unterschiedliche Zeitzonen beachten muss, solltet ihr entsprechend auf TIMESTAMP zurückgreifen.

Solltet ihr Daten vor 1970 brauchen (z.B. zum Abspeichern von Geburtsdaten) oder Daten nach 2038, solltet ihr DATETIME verwenden. Für andere Informationen, insbesondere für Metadaten wie der angesprochene Zeitpunkt der Registrierung, solltet ihr TIMESTAMP verwenden.

Datum per PHP eintragen

Nachdem ihr nun (hoffentlich) wisst, welche Feldtypen ihr nutzen wollt, geht es nun daran die Feldtypen in PHP zu verwenden. Möchtet ihr Werte in ein Zeit- bzw. Datumfeld eintragen, so übergebt ihr einen entsprechenden String im obigen Format, also z.B. 'YYYY-MM-DD' für DATE bzw. 'YYYY-MM-DD HH:MM:SS' für DATETIME/TIMESTAMP. Der passende Code um das aktuelle Datum einzutragen sieht wie folgt aus:

1
2
3
4
5
6
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("UPDATE tabelle SET zeitpunkt = ? WHERE id = 1");
$statement->execute(array(date('Y-m-d H:i:s'));
?>

Das richtige Format bekommen wir, indem wir mittels der date()-Funktion es entsprechend generieren. Einen Überblick über die Werte für date() erhaltet ihr in unserem Artikel Datum und Uhrzeit. Falls ihr ein DATE-Feld habt, so nutzt ihr nur 'Y-m-d', bei einem TIME-Feld entsprechend 'H:i:s'.

Datum formatieren

Eher selten wollen wir das MySQL-Datenformat 'YYY-MM-DD HH:MM:SS' auch so auf der Website ausgeben, sondern beispielsweise ein deutsche Datumsformat wählen oder gewisse Informationen, wie z.B. die Sekunden, weglassen.

Dazu gibt es drei Varianten die wir euch im folgenden vorstellen. Die ersten beiden formatieren das Datum mittels SQL. Die dritte Variante, dir wir euch dringend empfehlen, ist die Formatierung des Formats mittels PHP.

Datum in PHP formatieren per strototime()

Die leichteste Methode ein Datum aus der Datenbank zu formatieren ist vermutlich die Kombination aus der Funktion strtotime() und date() . Mittel strtotime wird das Datum in einen Unix-Timestamp umgewandelt und mittels date könnt ihr das Datum wie im Artikel Datum und Uhrzeit beschrieben formatieren.

1
2
3
4
5
6
7
8
9
10
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("SELECT zeitpunkt FROM tabelle");
$statement->execute(array());  
while($row = $statement->fetch()) {
   echo date('d.m.y H:i:s', strtotime($row['zeitpunkt']))."<br />";
}
 
?>

Hinweis: Da das Datum in einen Unix-Timestamp umgewandelt wird, kann es zu Problemen kommen bei einem Datum dass vor dem 01.01.1970 oder nach dem 19.01.2038 liegt. Sollte das Datum also vor 1970 oder nach 2038 liegen, solltet ihr die nachfolgende DateTime-Klasse verwenden.

Datum in PHP formatieren per DateTime

Die DateTime()-Klasse steht seit PHP 5.2 zur Verfügung steht und erlaubt es euch bequem das Datum in ein beliebiges Format zu bringen. Anders als bei der vorherigen Methode habt ihr hier keine Probleme mit Daten die vor 1970 oder nach 2038 liegen.

Der Code sieht wie folgt aus:

1
2
3
4
5
6
7
8
9
10
11
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
$statement = $pdo->prepare("SELECT zeitpunkt FROM tabelle");
$statement->execute(array());  
while($row = $statement->fetch()) {
   $date = new DateTime($row['zeitpunkt']);
   echo $date->format('d.m.y H:i:s')."<br />";
}
 
?>

Zuerst erzeugt ihr ein DateTime()-Objekt und übergibt diesen euren Datumsangabe aus MySQL. Mittels der Methode $date->format($formatierung) könnt ihr dann das Datum in einem anderen Format wieder ausgeben. Hier könnt ihr wieder die gleichen Formatierungsoptionen wie bei der Funktion date() verwenden. Die wichtigsten sind

Format Funktion Beispiel
d Tag des Monats, zweistellig 04, 15
j Tag des Monats, einstellig 5, 23
m Nummer des Monats, zweistellig 05, 12
n Nummer des Monats, einstellig 4, 11
y Jahr, zweistellig 98, 05
Y Jahr, vierstellig 1998, 2005
H Stunden im 24-Stunden-Format, zweistellig 04, 18
G Stunden im 24-Stunden-Format, einstellig 4, 14
i Minuten, zweistellig 04, 32
s Sekunden, zweistellig 02, 55
w Wochentag in Zahlenwert, 0 für Sonntag, 6 für Samstag 1, 5

Dank der Klasse DateTime() haben wir eine einfache Möglichkeit, um Datums- und Zeitangaben die von MySQL kommen in unser gewünschtes Format zu formatieren.

MySQL Timestamp formatieren

Ihr könnt euer Datum auch in der SELECT-Abfrage in andere Formate bringen. Sofern eure Datums- und Zeitangabe zwischen dem 01.01.1970 und dem 19.01.2038 liegt, ihr also ein TIMESTAMP-Feld nutzt, könnt ihr die MySQL-Funktion UNIX_TIMESTAMP verwenden um aus dem Datum einen Unix-Timestamp zu generieren:

1
2
3
4
5
6
7
8
9
10
11
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
 
//Variante 1, mittels dem SQL-Befehl UNIX_TIMESTAMP
$statement = $pdo->prepare("SELECT UNIX_TIMESTAMP(zeitpunkt) AS zeitpunkt FROM tabelle");
$statement->execute(array());  
while($row = $statement->fetch()) {
   echo date('d.m.y H:i:s', $row['zeitpunkt']))."<br />";
}
 
?>

In den entsprechenden date()-Anweisungen könnt ihr natürlich auch jedes andere Datumsformat wählen.

MySQL Datetime formatieren

Solltet ihr ein Datum vor 1970 haben, z.B. ein Geburtsdatum, oder ein Datum nach 2038, so funktioniert der obere Wege nicht mehr zuverlässig, da mittels Unix-Timestamp (aktuell) nur Datenangaben in dieser Zeitspanne angegeben werden kann. Aber ihr habt dort andere Möglichkeiten, auf die ihr zurückgreifen könnt. Wenn ihr also ein DATETIME-Feld oder DATE-Feld nutzt, verwendet eine der folgenden Möglichkeiten. Diese Variante funktioniert natürlich auch für TIMESTAMP-Felder.

Die erste Variante ist es mittels der MySQL-Funktion DATE_FORMAT() zu lösen. Eure SQL-Query kann dazu wie folgt aussehen:

1
SELECT DATE_FORMAT(zeitpunkt, '%d.%m.%Y %H:%i:%s') AS zeitpunkt FROM tabelle

Ähnlich wie in PHP geben wir den Formatierungsstring an. In diesem Fall wird aus 2015-08-15 10:21:54 ein Datum im Format 15.05.2015 10.21.54. Natürlich könnt ihr dort auch ein beliebig anderes Format wählen. Im folgenden die wichtigsten Formatierungselemente für MySQL:

Format Funktion Beispiel
%d Tag des Monats, zweistellig 04, 15
%e Tag des Monats, einstellig 4, 15
%m Nummer des Monats, zweistellig 05, 12
%c Nummer des Monats, einstellig 5, 12
%y Jahr, zweistellig 98, 05
%Y Jahr, vierstellig 1998, 2005
%H Stunden im 24-Stunden-Format, zweistellig 04, 18
%k Stunden im 12-Stunden-Format, einstellig 4, 14
%i Minuten, zweistellig 04, 32
%s Sekunden, zweistellig 02, 55
%w Wochentag in Zahlenwert, 0 für Sonntag, 6 für Samstag 1, 5
Autor: Nils Reimers
Zurück: Gefundene Einträge zählen mittels COUNT
Weiter: Datum- und Zeitfunktionen in MySQL

MySQL Tutorial

  • MySQL installieren und starten
  • phpMyAdmin
  • Verbindung aufbauen
  • Simple Datenabfrage
  • Komplexere Datenabfrage
  • Prepared Statements
  • Daten einfügen
  • Daten aktualisieren
  • Daten löschen
  • Gefundene Einträge zählen
  • DATE-Datenbankspalten
  • Datum- und Zeitfunktionen
  • MySQL Fehlermeldungen
  • Datenbankverbindung schließen
  • JOIN
  • Indizes
  • Normalformen
  • Fremdschlüssel
  • Übersicht SQL-Befehle
  • Crashkurs MySQL
  • Crashkurs MySQLi
  • Crashkurs PDO
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. netcup Ø 0 Min.
  2. webgo Ø 0 Min.
  3. Linevast Ø 3 Min.
  4. All-Inkl.com Ø 3 Min.
  5. checkdomain Ø 4 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 10 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 14 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}