Systemvoraussetzung
- Linux
- Windows
- PHP 3
- PHP 4
- PHP 5
Datei(en)
mysqlDate.php
Problem
Sie haben ein deutsches Datumsformat in der Form 22.03.2006 und müssen
es für die Speicherung in einer MySQLDatenbank
in das entsprechende Format
konvertieren (20060322).
Umgekehrt stellt sich die Frage, wie man ein Datum
vom MySQLFormat,
z. B. einen MySQLTimestamp
(20060322181602) oder ein
DateTimeFormat
(20060322
23:59:12), in ein deutsches Format bekommt.
Eine andere Problemstellung wäre etwa, dass Sie ein MySQLDatum
aus einer
Textdatei zu einem deutschen Format weiterverarbeiten müssen und nicht auf
MySQL direkt zugreifen können. Sie sehen erneut, dass man nicht unbedingt
immer nur eine Lösung parat haben kann, sondern je nach Problem agieren
muss.
Lösung
Die Konvertierung des vorhandenen Datums stellt sich als sehr simpel heraus,
da lediglich einzelne Bereiche innerhalb des Datums vertauscht werden
müssen. Deutsche Datumsangaben liegen immer in der Form dd.mm.YYYY
(z. B. 22.03.2006) vor, MySQLDatumsangaben
dagegen im ISO8601Format
(YYYY.mm.dd).
Sie werden später im Buch sehen, wie direkt mit der MySQLFunktion
date_format() dieses Datumsproblem umgangen werden kann. Sollten Sie
Zugriff auf eine MySQLDatenbank
haben, bietet sich die elegantere Variante
mit date_format() an.
function date_mysql2german($date)
Diese Funktion erwartet als einzigen Parameter (32) das Datum im MySQLFormat
(20060322).
Das übergebene Datum wird im nächsten Schritt anhand
des Bindestrichs in seine Bestandteile zerlegt (33) und dabei in ein Array
überführt. Jetzt haben wir im ArrayIndex
0 das Jahr, im ArrayIndex
1 den
Monat und im ArrayIndex
2 den Tag.
Zum Schluss müssen wir lediglich unser Array mit den einzelnen Datumsbestandteilen
wieder in ein korrektes deutsches Datum konvertieren. Hierfür
bedienen wir uns sprintf() und geben den formatierten String in der Form
dd.mm.YYYY an die aufrufende Stelle (98) zurück.
Haben Sie ein DatumsZeitformat
(20060322
23:59:12), so müssen Sie das
Datum vor der Übergabe mit explode() zerlegen (91) und nur den Wert im
ArrayIndex
0 an die Funktion übergeben. Die Uhrzeit im ArrayIndex
1 kann
so bestehen bleiben, muss also nicht formatiert werden.
032:
033: 034: 035: 036:
|
function date_mysql2german($date)
{
$d = explode("-",$date); return sprintf("%02d.%02d.%04d", $d[2], $d[1], $d[0]); } |
Beispiel 2.11: mysqlDate.php
087:
088: 089: 090: 091:
092:
| echo "Beispiel: 2006-03-22 <br>\n";
echo "wird zu : " . date_mysql2german("2006-03-22") . " <br>\n";
echo "Beispiel: 2006-03-22 23:59:12 <br>\n"; $expDate = explode(" ","2006-03-22 23:59:12"); echo "wird zu : " . date_mysql2german($expDate[0]) . " $expDate[1] <br>\n";
|
Beispiel 2.12: mysqlDate.php
Ausgabe
Beispiel: 20060322
wird zu : 22.03.2006
Beispiel: 20060322
23:59:12 wird zu : 22.03.2006 23:59:12
function date_german2mysql ($date)
Bei der Konvertierung vom deutschen Datumsformat in das MySQLFormat
ist
der vorherige Schritt nur umzudrehen. Wir trennen wieder unser Datum in
seine Bestandteile (47) und formatieren es mit sprintf() (49), bevor wir es
an die aufgerufene Stelle (88) zurückgeben.
046:
047:
048:
049:
050: |
function date_german2mysql($date)
{
$d = explode(".",$date);
return sprintf("%04d-%02d-%02d", $d[2], $d[1], $d[0]);
} |
Beispiel 2.13: mysqlDate.php
087:
088: |
echo "Beispiel: 2006-03-22 <br>\n";
echo "wird zu : " . date_mysql2german("2006-03-22") . " <br>\n"; |
Beispiel 2.14: mysqlDate.php
Ausgabe
Beispiel: 22.03.2006 wird zu : 20060322
function timestamp_mysql2german($date)
@param integer $date
@return string
Die Konvertierung von einem MySQL-TimestampFormat
(20060322181602)
in ein deutsches Format erfordert ein wenig mehr Aufwand, ist aber auch
mit wenigen Programmzeilen erledigt. Die Funktion erwartet als Parameter
(60) das Datum im MySQL-TimestampFormat
und stellt dieses der Funktion
sprintf() (62) zur Formatierung zur Verfügung. Wir müssen jetzt lediglich
zum einen das Datum trennen (62) und zum anderen die Uhrzeit (64).
Die Werte in den Klammern von substr($date, 6, 2) bedeuten hier lediglich,
dass von der sechsten Stelle an insgesamt 2 Zeichen ausgegeben werden
sollen. Bitte bedenken Sie, dass bei der Funktion substr() von Null (0) aus
angefangen wird zu zählen! Den Tag (62), den Monat und das Jahr formatieren
wir wieder im Format dd.mm.YYYY (%02d.%02d.%04d) und speichern diese
wieder in das Array $stamp['date'].
Die Stunden (64), die Minuten und die Sekunden formatieren wir mit
sprintf() in das Format HH:ii:ss (%02d:%02d:%02d) und speichern den
Wert in unser Array $stamp['time']. Zum Schluss müssen wir lediglich das
Array (66) an die aufrufende Stelle (99) zurückgeben.
060:
061:
062:
063:
064:
065:
066:
067: |
function timestamp_mysql2german($date) {
$stamp['date'] = sprintf("%02d.%02d.%04d",
substr($date, 6, 2),
substr($date, 4, 2),
substr($date, 0, 4));
$stamp['time'] = sprintf("%02d:%02d:%02d",
substr($date, 8, 2),
substr($date, 10, 2),
substr($date, 12, 2));
return $stamp;
} |
Beispiel 2.15: mysqlDate.php
097:
098:
099: |
echo "Beispiel: 20060322181602 <br>\n";
$dateTime = timestamp_mysql2german("20060322181602");
echo "wird zu : " . $dateTime['date'] . " " . $dateTime['time'] . " <br>\n"; |
Beispiel 2.16: mysqlDate.php
Ausgabe
Beispiel: 20060322181602 wird zu : 22.03.2006 18:16:02
function timestamp_german2mysql($date)
@param string $date
@return integer
Die Umrechnung von einem deutschen Datumsformat mit Zeitangabe (22.03.
2006 18:16:02) in ein My-SQLTimestamp-Format
beginnt wieder mit der Übergabe
des Datums an die Funktion (77).
Da das Datum mit einem Leerzeichen von der Uhrzeit getrennt ist, trennen wir
den kompletten String (79) anhand des Leerzeichens und erhalten ein Array
$split, bestehend aus Datum und Uhrzeit.
Die Werte in den Klammern von substr($split[0], 6, 4) bedeuten hier
lediglich, dass das Datum aus unserem Array mit dem Index Null (0) von der
sechsten Stelle aus, insgesamt 4 Zeichen, ausgegeben werden soll. Achtung:
Auch bei der Funktion substr() wird von Null (0) ausgehend gezählt!
Jetzt müssen wir lediglich das Jahr (80), den Monat sowie den Tag mit der
Funktion sprintf() (80) in das Format YYYY.mm.dd konvertieren und den
Wert in unsere Variable $timestamp speichern.
Bei der Uhrzeit gehen wir ähnlich vor, jedoch mit dem Unterschied, dass wir
die formatierte Uhrzeit (HH:ii:ss) an die Variable $timestamp anhängen.
077:
078:
079:
080:
081:
082:
083:
084:
085: |
function timestamp_german2mysql($date) {
$split = explode(" ",$date);
$timestamp = sprintf("%04d%02d%02d",
substr($split[0], 6, 4),
substr($split[0], 3, 2),
substr($split[0], 0, 2));
$timestamp .= sprintf("%02d%02d%02d",
substr($split[1], 0, 2),
substr($split[1], 3, 2),
substr($split[1], 6, 2));
return $timestamp;
} |
Beispiel 2.17: mysqlDate.php
101:
102: |
echo "Beispiel: 22.03.2006 18:16:02 <br>\n";
echo "wird zu : " . timestamp_german2mysql("22.03.2006 18:16:02") . " <br>\n"; |
Beispiel 2.18: mysqlDate.php
Ausgabe
Beispiel: 22.03.2006 18:16:02 wird zu : 20060322181602
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
|