Eingabeformat des Datums ändern
Thomas D.
- datenbank
Ein hab ich noch
Wenn ich in meiner Eingabemaske das Datum nach SQL Schreibweise eingebe 20040906 wird es so in die Datenbank übernommen.
Was muss ich aber machen das wenn ich eingebe 01.09.2004 er in die Datenbank das format 20040901 rein schreibt
Gruss Thomas
Hi,
Was muss ich aber machen das wenn ich eingebe 01.09.2004 er in die Datenbank das format 20040901 rein schreibt
den String mit Hilfe der von Deinem DBMS (welches immer das sein mag) bereitgestellten Datums-Funktionen konvertieren.
Cheatah
Hello,
Was muss ich aber machen das wenn ich eingebe 01.09.2004 er in die Datenbank das format 20040901 rein schreibt
den String mit Hilfe der von Deinem DBMS (welches immer das sein mag) bereitgestellten Datums-Funktionen konvertieren.
Reichen die immer aus?
Müsste man sich nicht besser in PHP (oder was sonst für das API benutzt wird) eine intelligente Datumskonvertierung erstellen?
Typisch könnten folgende Schreibweisen sein:
06,09,04
06,09,2004
6,9,4
Das Ganze nun mit Punkt, Bindestrich, Komma usw.
Oder eben gelich besser drei Felder für Tag, Monat, Jahr anbieten und einen Haken für "verkürzte Jahreszahl wird ergänzt: 00 bis 20 => 20xx, 21 bis 99 => 19xx"
Die Ergonomie von Eingabeformularen wird leider oft vergessen.
Wer es gewohnt ist, mit dem Ziffernblock zu arbeiten, ist bei Daten und Zahlen in Webfomularen oft am Verzweifeln.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Die Ergonomie von Eingabeformularen wird leider oft vergessen.
Wer es gewohnt ist, mit dem Ziffernblock zu arbeiten, ist bei Daten und Zahlen in Webfomularen oft am Verzweifeln.
Ich habe eine JavaScript-Funktion geschrieben, die beim Verlassen des Feldes (onBlur="this.value=correctdate(this.value)") aufgerufen werden kann und dann versucht, das Datum zu erraten aus Eingaben wie 0809, 8.9, 8.9.4, 080904 und natürlich 08.09.2004 und dann in einem gewünschten Format zurück ins Feld zu schreiben. Kann auch im Backend eingesetzt werden.
function correctdate(datum)
{
// jt/2004 - public domain
// Korrigiert Datumseingaben auf das Format TT.MM.JJJJ
var jetzt = new Date();
var jahr = jetzt.getYear();
var monat = jetzt.getMonth();
var t = 0;
var m = 0;
var j = 0;
daysinmonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
daysinmonth[1] += (((jahr % 4 == 0) && (jahr % 100 != 0)) || (jahr % 400 == 0)) ? 1 : 0;
var testarr = datum.split(".");
if (testarr.length == 1)
{
if (testarr[0].substr(0,2).length > 0)
t = parseInt(testarr[0].substr(0,2),10);
if (testarr[0].substr(2,2).length > 0)
m = parseInt(testarr[0].substr(2,2),10);
if (testarr[0].length > 5)
j = parseInt(testarr[0].substr(4,2),10);
}
else if (testarr.length == 2)
{
if (testarr[0].length > 0)
t = parseInt(testarr[0],10);
if (testarr[1].length > 0)
m = parseInt(testarr[1],10);
j = jahr;
}
else if (testarr.length == 3)
{
if (testarr[0].length > 0)
t = parseInt(testarr[0],10);
if (testarr[1].length > 0)
m = parseInt(testarr[1],10);
if (testarr[2].length > 0)
j = parseInt(testarr[2],10);
}
if (m == 0)
m = monat + 1;
else if (m < 1)
m = 1;
else if (m > 12)
m = 12;
if (t < 1)
t = 1;
else if (t > daysinmonth[m-1])
t = daysinmonth[m-1];
if (j == 0)
j = jahr;
else if (j < 100)
j += 2000;
var tzero = (t < 10) ? "0" : "";
var mzero = (m < 10) ? "0" : "";
if (datum != "" && datum != " ")
return tzero + t + "." + mzero + m + "." + j;
else
return "";
}
Die Zeile 'var testarr = datum.split(".");' ist der Einstiegspunkt, um das Trennzeichen festzulegen (mehrere gleichzeitig sind leider [noch] nicht möglich).
Die Zeile 'return tzero + t + "." + mzero + m + "." + j;' kann angepasst werden, um das Rückgabeformat zu bestimmen, ich gebe hier das deutsche Format zurück.
Der Yeti
Hi,
den String mit Hilfe der von Deinem DBMS (welches immer das sein mag) bereitgestellten Datums-Funktionen konvertieren.
Reichen die immer aus?
ich kenne nicht jedes einzelne DBMS. Im Allgemeinen sollte aber, wenn das Eingangsformat bekannt ist, eine Konvertierung mit purem SQL möglich sein.
Müsste man sich nicht besser in PHP (oder was sonst für das API benutzt wird) eine intelligente Datumskonvertierung erstellen?
Wenn das Datumsformat _nicht_ feststeht, muss eine Entscheidungslogik ran, die vermutlich nicht mehr in SQL abgebildet werden kann.
06,09,04
9. April 2006? Gewisse Formate können mit _keiner_ Entscheidungslogik erkannt werden.
06,09,2004
9. Juni oder 6. September?
6,9,4
Dies würde ich nicht mal als Mensch als Datum akzeptieren.
Die Ergonomie von Eingabeformularen wird leider oft vergessen.
Ja.
Cheatah
Hallo Thomas D.!
Was muss ich aber machen das wenn ich eingebe 01.09.2004 er in die Datenbank das format 20040901 rein schreibt
Schau' dir mal folgende Webseiten an:
- MySQL Manual: A.5.2 Probleme bei der Benutzung von DATE-Spalten
http://dev.mysql.com/doc/mysql/de/Using_DATE.html
- 14.2. Wie kann ich ein deutsches Datum in MySQL-Format umwandeln (und umgekehrt)?
http://www.dclp-faq.de/q/q-datum-mysql.html
Irgentwie klappt das alles nicht...
Dies ist mein Quellcode...
die Variable die uebergeben wird heisst $datum
if($action=="insert"){
function date_german2mysql($datum) {
list($tag, $monat, $jahr) = explode(".", $datum);
return sprintf("%04d-%02d-%02d", $jahr, $monat, $tag);
}
$var='<font face="Times New Roman" color="#FFFFFF" size="3">';
$var1='<p>';
$news_vb=nl2br($news_vb);
$news_vb=eregi_replace("\n", "", $news_vb);
$news_SQL_insert="INSERT INTO touren (Verladedatum, Verladewerk, Verladebetrieb, Lieferscheinnummer, Gewicht, Entladewerk, CoilNr, Abgerechnet, Kennzeichen, Sondertour, news_datetime)VALUES ('$datum', '$news_vw', '$news_vb','$news_lsn','$news_gw','$news_ew','$news_cn','$news_ag','$news_kz','$news_st','$news_datetime')";
$bool=mysql_query($news_SQL_insert);^
if($bool==1) echo "<body bgcolor='#5B5757'><SCRIPT LANGUAGE=JavaScript>window.alert('Nachricht wurde aufgenommen')</SCRIPT>";
if($bool<>1) echo "<body bgcolor='#5B5757'><SCRIPT LANGUAGE=JavaScript>window.alert('Beim Aufnehmen der Nachricht ist ein Fehler aufgetreten')</SCRIPT>";
}
was um Gottes Willen muss da rein damit das Datumsformat 01.09.2004 in 2004-09-01 gewandelt wird......
Thomas