# Datumformat in mySQL ändern



## Phips_CH (25. Mai 2011)

Kann ich in phpMyAdmin das Format des Datums so ändern das denn ich in PHP dd.mm.YYYY eigebe es auch so in der mySQL-Datenbank drinsteht?
Oder muss ich es bei der Eingabe mit PHP umwandeln und beim Anzeigen wieder umwandeln?

denn Standartmässig ist das Format YYYY.mm.dd.

Gruss Phips_CH


----------



## chmee (25. Mai 2011)

(A) date_format() in MySQL anwenden.
(B) Warum wird das Datum so und nicht anders gespeichert? Hier
(C) Ich plädiere immer für timestamp  Egal, was man anstellen möchte, es ist das einfachste Format.

mfg chmee


----------



## Phips_CH (25. Mai 2011)

das gibt mir einfach das Datum in deutscher Schreibweise aus. 
Aber wenn ich dann mit meinem PHP-Formular einen neuen Datensatz hinzufüge und das aktuelle Datum 25.05.2011 eingebe, steht 2025-05-20 in der Datenbank. 
Ist es nicht möglich, dass ich 25.05.2011 ind der Datenbank stehen habe?


----------



## Napofis (25. Mai 2011)

Mach doch einfach aus den einen Eingabe Feld drei. Eins für das Jahr, eins für den Monat und eins für den Tag. Und zum Speichern fügst du sie wieder entsprechend zusammen. MySQL akzeptiert nur dieses Datumsformat, wenn dann musst du es als String speichern und immer wieder umwandeln wenn du damit rechnen willst.


----------



## chmee (25. Mai 2011)

Du könntest einfach per explode die Eingabe zerlegen und danach wieder zusammensetzen. Tatsache ist, dass das Datumsformat in MySQL per ISO 8859-1 genormt ist. hast Du denn zumindest die Links aufgemacht, die ich Dir gegeben habe?


```
$datum_in = "25.10.2011";

$zerlegt = explode(".",$datum_in);

$datum_richtig = $zerlegt[2]."-".$zerlegt[1]."-".$zerlegt[0];
echo $datum_richtig;
```
Hingescriptet, könnte fehlerhaft sein..

mfg chmee


----------



## Phips_CH (25. Mai 2011)

ja hab ich. 

Das heisst ich komme nicht drum rum, das Format beim Eintragen umzuwandeln und auch wieder beim Auslesen.

Dies ist möchte ich da ich eine Sammlung von Terminen habe. Durch das eingeben in einem Formular kommen immer neue hinzu. Als Info will ich diese auf einer anderen Seite wieder ausgeben.

Dafür ist das Deutsche-Format schöner anzusehen und auch verständlicher. 

Gruss
Phips_CH


----------



## chmee (26. Mai 2011)

Nun mach es Dir nicht so schwer, nimm Timestamp, damit hast Du zwei Umrechnungen - vor dem Eintrag in die DB und die beim Auslesen. Du erzählst, was Dein Programm machen soll, letztendlich erkenne ich aber nicht, wo das Problem liegen soll. Wie schön eine Ausgabe ist, hat mit der DB-Speicherung nichts zu tun.


```
$datum_in="25.10.2011";
echo $datum_in."</br>";

$zerlegt=explode(".",$datum_in);
$timestamp_in=mktime(0,0,0,$zerlegt[1],$zerlegt[0],$zerlegt[2]);

echo $timestamp_in."</br>";
// -- damit hast Du ne timestamp vom datum --
// ---------
// -- und wieder zurück
$datum_out=date("d.m.Y",$timestamp_in);

echo $datum_out."</br>";
// -- so schwer?
```

mfg chmee


----------



## Phips_CH (29. Mai 2011)

speichert Timestamp nicht das aktuelle Datum?

Ich möchte aber eine Terminverwaltung erstellen. das heisst, Termine mit Datum und Treffpunkt, Ort etc speichern. Dafür muss ich Datum eigeben können die erst sein werden.

Ich arbeite mit Dreamweaver und hab folgenden Code.


```
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form2"))
{
  $insertSQL = sprintf("INSERT INTO pobi_termine (ter_termin, ter_wann, ter_wo) 
VALUES (%s,str_to_date('%s', '%s'), $s)",
                       GetSQLValueString($_POST['ter_termin'], "text"),
                       GetSQLValueString($_POST['ter_wann'],"%d.%m.%Y"),
                       GetSQLValueString($_POST['ter_wo'], "text"),
```

es funktioniert aber nicht.

wenn ich, wie im folgenden Beispiel nur eine Feld mit dem Datum habe, funktioniert der Code.


```
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {     
$insertSQL = sprintf("INSERT INTO pobi_termine (ter_wann) VALUES (str_to_date('%s', '%s'))",
mysql_real_escape_string($_POST['datum']),'%d.%m.%Y');
```

Was ist beim ersten Code falsch?

Gruss 
Phips_CH


----------



## chmee (29. Mai 2011)

(Unix)Timestamp an sich ist erstmal eine Normierung, nämlich der vergangenen Sekunden seit (ich glaub) 1.1.1970 und wird in einer simplen 10 oder 11Bit-Integer gespeichert. In meinem php-Beispiel hast Du das Umrechnen von Datum nach timestamp mktime() und das Zurückformen mit date() in das "von Dir gewünschte Datumsformat".

Sei mir nicht böse, aber schaust Du Dir an, was man Dir an Häppchen gibt?
mfg chmee


----------



## saftmeister (29. Mai 2011)

Sorry, nur zum richtig stellen:



chmee hat gesagt.:


> ...10 oder 11Bit-Integer gespeichert.


 
Es gibt keine 10 oder 11Bit-Integers. Integer ist entweder 16 oder 32Bit groß. Es gibt Integer-Implementierungen die größere Werte als 32Bit (4Byte entspricht signed 2.147.483.647 Max oder unsigned 4.294.967.295) annehmen können. Diese werden in der Regel aber Bigint genannt.


----------



## Phips_CH (29. Mai 2011)

klar seh ich mir die Häppchen an. 

für mich als php- und mySQL-neuling, ist es nicht ganz eifach diese nachzuvollziehen.
hab dann mit Hilfe aus dem Netz den Code erhalten. 

Ich werde mich mal mit der Timestam befassen.


----------



## chmee (29. Mai 2011)

saftmeister - Natürlich sind 10 oder 11Bit Integer teuflisch krumm, ABER

(A) ich hab mich geirrt, man nimmt einfach 64Bit Integer (man nenne es eben BigInt), fertig für alle Zeit (sogar 32Bit sind für die nächsten *hüstel* 27 Jahre mehr als genug)
und vor Allem
(B) heisst Integer ganz einfach "ganze Zahl". Mir ist aber wohlbewusst, dass sich in der Informatikerwelt int für 16 oder 32Bit lange Repräsentationen durchgesetzt hat.

mfg chmee


----------

