Hi Tobias,
Ich habe mir eine Funktion geschrieben, die versucht aus dem eingegebenen String ein Datum zu erkennen, dabei erkennt sie jedes Datum in der Form DD.MM.(JJ)JJ oder (JJ)JJ.MM.DD (wobei der . für \D+ steht und das Jahr mit einem optionalen Parameter ergänzt wird wenn es nur 2-stellig ist). Wenn das Datum erkannt wird, gibt die Funktion true zurück und verändert den übergebenen Wert so, das er im Format "DD.MM.JJJJ" ist.
Beispiel: 04.05.06
Wie willst du erkennen, ob das JJ.MM.DD oder DD.MM.JJ ist?
Deshalb stelle ich den Usern immer drei Select-Listen zur Verfügung, die lassen sich bequem mit PHP erzeugen:
Das halte ich aber für eine sehr dämliche und umständlich zu bedienende Lösung ...
Ich nicht - sonst hätte ich es auch nicht so geschrieben ;-)
Der Vorteil den ich darin sehe ist, dass es leicht zu bedienen ist und man dem User auch statt den Zahlen für den Monat auch die Monatsnamen anbieten kann. Es bedarf keiner eigenen Erklärung für DAU's wie man das formatieren muss und beim nächsten Laden der Seite (z.B. ein Benutzerprofil) ist natürlich das alte ausgewählte Datum wieder vorselektriert.
ich habe wesentlich schneller z.B. 4r5r06 eingegeben (was meine Funktion zu 04.05.2006 macht) als mir in einem select-Feld die richtigen Werte zusammengefummelt.
Wenn es nur für dich ist, oder wenn viele Daten eingegeben werden sollen, hast du mit deiner Begründung sicherlich Recht, auf einer Seite, bei der man nicht ein gewisses Midestniveau der Besucher vorraussetzen kann, halte ich dies allerdings für zu kompliziert.
Bedenke, wie viele Möglichkeiten es gibt, ein Datum zu formatieren:
- DD.MM.(YY)YY
- (YY)YY.DD.MM
- (YY)YY-MM-DD
- DD/MM/(YY)YY
- (YY)YY/MM/DD
Das sind allein schon mal für, wegen der Jahreszahl eigentlich sogar 10, und wenn man davon ausgeht, dass man statt 06 auch 6 schreiben kann sogar noch mehr Möglichkeiten - und bestimmt noch nicht alle.
Zusätzlich baue ich auch noch http://www.mattkruse.com/javascript/calendarpopup/ mit ein, womit man ein Datum auch relativ bequem eingeben kann.
Den zweiten und dritten davon finde ich brauchbar - allerdings in der aktuellen Form nicht für z.B. ein Geburtsdatum, da es dort ewig dauern würde, bis man z.B. beim Jahr 1960 angelangt ist ;-)
Bei den meisten Kalender willst du ein PopUp öffnen, was mein Firefox blockt. Seltsamerweise sehe ich bei Klick auf die Block-Leiste keine Auswahl, irgedetwas zu öffnen, wie es sonst der Fall ist...
for($x = 1920; $x <= intval(date("Y")); $x ++)
Suchst du gerne einen Eintrag aus einem Select-Feld das über 80 Einträge enthält?
Das geht verhältnismäßig schnell.
Und was machst du wenn du ein Jahr in der Zukunft brauchst?
Das ist bei einem Geburtsdatum nie der Fall ;-)
Um das Datum Datenbanktauglich zu bekommen, verwende ich
$datum = preg_replace('~^([0-9]{2})\.([0-9]{2})\.([0-9]{4})$~',"$3-$2-$1",$_POST['datum']);
Hier ist nun aber ein Datum wie DD.MM.YY nicht erlaubt. Wenn du das nämlich auch erlauben würdest, würde das ganze nochmal deutlich komplizierter werden.
man könnte natürlich auch die Felder per explode() auseinanderdröseln und wieder zusammenkleben - das wäre vermutlich sogar schneller ...
Wäre vielleicht sogar sinnvoll, damit du eine Angabe wie 2005-17-69 entlarfen kannst ;-)
MfG, Dennis.
Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
Papa, da sammelt einer für das neue Schwimmbad. - Na dann, gib ihm einen Eimer Wasser.