Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Datum/Uhrzeit von MySQL-Format ins deutsche Format und zurück


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($date62),
                             
substr($date42),
                             
substr($date04));
                                            
    
$stamp['time']    =    sprintf("%02d:%02d:%02d",
                             
substr($date82),
                             
substr($date102),
                             
substr($date122));

    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], 64),
                          
substr($split[0], 32),
                          
substr($split[0], 02));
                                            
    
$timestamp .=    sprintf("%02d%02d%02d",
                          
substr($split[1], 02),
                          
substr($split[1], 32),
                          
substr($split[1], 62));

    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.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner LeaseWeb Germany GmbH
Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


DM Solutions
Microsoft Deutschland GmbH
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2013 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt