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
Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
Und bin so klug als wie zuvor!