de.comp.lang.php.* FAQ

14.2. Wie kann ich ein deutsches Datum in MySQL-Format umwandeln (und umgekehrt)?

Antwort von Kristian Köhntopp

MySQL verarbeitet Datumsangaben im ISO-8601-Format (siehe die Abhandlung von Markus Kuhn zu diesem Thema). Dies ist das offizielle deutsche Datumsformat, eine Umwandlung ist nicht notwendig, weil nicht normgerecht.

Dennoch kann man das Datum auch in anderen Formaten bekommen. Wahlweise kann die Umwandlung bereits in MySQL oder erst in PHP geschehen. In MySQL kann man mit Hilfe der Funktion date_format das Datum in beliebigen Formaten bekommen:

mysql> SELECT date_format(changed, '%d.%m.%Y %H:%i:%s') AS datum
    -> FROM teiln_liste;
+---------------------+
| datum               |
+---------------------+
| 27.08.1998 12:49:29 |
| 14.12.1999 15:05:52 |
| 13.12.1999 08:30:43 |
| 13.05.1998 15:51:45 |
| 06.10.1998 14:30:25 |
| 07.08.1998 11:28:59 |
| 23.06.1998 17:15:16 |
| 14.01.1999 08:34:22 |
| 07.01.2000 11:36:42 |
| 01.02.1999 08:47:25 |
+---------------------+
10 rows in set (0.00 sec)

In PHP kann man mit Hilfe der Funktion date() aus einem time_t ein beliebiges Datum generieren und mit Hilfe der Funktion mktime() aus den Fragmenten einer Datumsangabe einen time_t erzeugen. Mit den time_t (Sekunden seit Mitternacht GMT, 1. Januar 1970) lassen sich sehr natürlich Zeitdifferenzen bestimmen und andere Zeitrechnungen ausführen.

Will man dagegen nur einen MySQL TIMESTAMP oder DATE in andere Reihenfolge umsortieren, kann man stattdessen mit den Funktionen explode() oder substr() arbeiten.

/**
 * date_mysql2german
 * wandelt ein MySQL-DATE (ISO-Date)
 * in ein traditionelles deutsches Datum um.
 */
function date_mysql2german($datum) {
    list($jahr, $monat, $tag) = explode("-", $datum);

    return sprintf("%02d.%02d.%04d", $tag, $monat, $jahr);
}

/**
 * date_german2mysql
 * wandelt ein traditionelles deutsches Datum
 * nach MySQL (ISO-Date).
 */
function date_german2mysql($datum) {
    list($tag, $monat, $jahr) = explode(".", $datum);

    return sprintf("%04d-%02d-%02d", $jahr, $monat, $tag);
}

/**
 * timestamp_mysql2german
 * wandelt ein MySQL-Timestamp
 * in ein traditionelles deutsches Datum um.
*/
function timestamp_mysql2german($t) {
    return sprintf("%02d.%02d.%04d",
                    substr($t, 6, 2),
                    substr($t, 4, 2),
                    substr($t, 0, 4));
}

Valid HTML 4.01! Valid CSS!

14.2. Wie kann ich ein deutsches Datum in MySQL-Format umwandeln (und umgekehrt)?
http://www.php-faq.de/q/q-datum-mysql.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team