Datum über INPUT einlesen und später auseinander nehmen
martin
- php
0 Vinzenz0 Marc Reichelt0 MudGuard0 lulu
Ich möchte über eine form ein datum einlesen:
<form name=date action=test_mame.php method=post>
<pre>
Start Datum: <input size="40" maxlength="10" name="startdate">End Datum: <input size="40" maxlength="10" name="enddate">
<input type="submit" value=" Absenden ">
</pre>
</form>
Diese beiden Werte will ich in eine Varible speichern und dort aus einadernehmen.
Wenn der User sein Datum ein gibt, sie das ja so aus: 29.11.2002
Diese Zahl muss ich jetzt in einen Unix Timestamp umandel. Wie ich da mache ist nicht das Problem, sondern das "29.11.2002" kann ich so nicht um wandeln.
Ich muss Tag, Monat und Jahr einzeln in je einer Variable haben.
Habe ihrmir da ein Tipp wie ich das am besten machen kann???
Ich bedanke mich schon im Vorraus!
greetings martin
Hallo (sagt man)
Ich möchte über eine form ein datum einlesen:
Wenn der User sein Datum ein gibt, sie das ja so aus: 29.11.2002
Du bist ein Optimist!
Benutzer geben das so ein, wie die Benutzer das wollen,
nicht wie Du das willst.
Ich muss Tag, Monat und Jahr einzeln in je einer Variable haben.
Habe ihrmir da ein Tipp wie ich das am besten machen kann???
Mach Auswahlfelder (mit <SELECT>)
Da hast Du die Werte schon gleich getrennt,
ist doch viel einfacher, nur mehr Arbeit für Dich vorher ;-)
Viel Spass,
Vinzenz
Du kannst das Datum doch nehmen, du musst halt den String in ein Array umwandeln, dies machst du so:
$startarray = split(".",$startdate);
$endarray = split(".",$enddate);
Die Dinge finden sich dann in den Elementen:
$starttag = $startarray[0];
$startmonat = $startarray[1];
$startjahr = $startarray[2];
$endtag = $endarray[0];
$endmonat = $endarray[1];
$endjahr = $endarray[2];
Das Problem hierbei ist, dass der User genau das Datumformat einhalten muss, ansonsten kommt Müll raus - ich empfehle DRINGENDS ein additives Exeption(Ausnahme)-Handling!!!!
Marc Reichelt || www.marcreichelt.de
Rückfragen bitte an:
Hallo Marc,
$startarray = split(".",$startdate);
$endarray = split(".",$enddate);
Das wird nicht klappen. Split erwartet einen regulären Ausdruck. Daher muss es wenn überhaupt:
$startarray = split("\.",$startdate);
heißen. Ich empfehle aber lieber
$res = preg_match ("/^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{2}(?:[0-9]{2})?)$/", $startdate, $startarray);
zu verwenden. Wenn $res 0 ist, dann ist kein gültiges Datum angegeben worden. Wenn $res 1 ist, dann steht in $startarray[1] der Tag, $startarray[2] der Monat und $startarray[3] das Jahr.
Marc Reichelt || www.marcreichelt.de
Rückfragen bitte an:
Stelle das doch bitte als Signatur ein, wärst Du so nett?
Grüße,
Christian
Hi,
Wenn der User sein Datum ein gibt, sie das ja so aus: 29.11.2002
Oder 2002-11-29 oder 1/2/3 (2. Jan. 2003) oder 11/29/02 oder 1.2.3 oder ...
Mach mindestens für Tag und Monat dropdowns (select-Elemente), sonst hast Du ein Problem...
cu,
Andreas
Huhu Martin
Ich muss Tag, Monat und Jahr einzeln in je einer Variable haben.
Habe ihrmir da ein Tipp wie ich das am besten machen kann???
Eine elegante und IMHO userfreundliche Möglichkeit wäre z.B. folgendes:
Mit Hilfe von preg_match_all extrahierst Du alle Zahlengruppen aus dem String.
Z.B. so:
preg_match_all('/(\d+)/',$dt,$store);
In $store[1] hast Du dann alle Treffer.
Als Delimiter funktioniert also quasi alles was nicht Zahl ist.
Fein, weiter geht es
ordne die 1. Zahl dem Tag zu
die 2. dem Monat
die 3. dem Jahr
(entsprechend kann man an dieser Stelle auch die Uhrzeit "mitnehmen")
Wenn Du nur einen Wert hast ordne 2. den aktuellen Monat und 3. das aktuelle Jahr zu.
Entsprechend wenn nur zwei Werte eingegeben wurden.
Jetzt überprüfst Du noch per checkdate das Ergebnis
http://www.php.net/manual/en/function.checkdate.php
dann entweder eintragen oder "meckern"
Als User kann man dann z.B. folgende Angaben machen
7. -> wird zu 7.11.2002
5.12 -> wird zu 5.12.2002
Am 3. des 5ten Monats im Jahre 2003 -> wird zu 3.5.2003
und bei 32-17-2002 liefert checkdate false
ich hoffe ich habe mich unverständlich genug ausgedrückt ;-)
so short & Viele Grüße
lulu
Hi,
ordne die 1. Zahl dem Tag zu
die 2. dem Monat
die 3. dem Jahr
Erklär das mal einem Amerikaner (11/29/2002 für heute)
oder jemandem, der 2002-11-29 angibt.
cu,
Andreas
Huhu Andreas
Erklär das mal einem Amerikaner (11/29/2002 für heute)
oder jemandem, der 2002-11-29 angibt.
Da hast Du natürlich recht, für eine Anwendung wo damit zu rechnen ist, dass Leute unterschiedliche Datumsformate benutzen sind Select-Formularfelder dann eine (vielleicht) bessere Alternative.
Aber ich denke das man für viele Einsatzbereiche davon ausgehen kann das ein europäisches Format benutzt wird.
Ansonsten könnte man ja noch zusätzlich nach fehlgeschlagener Überprüfung des Datums (oder vorher) einen Hinweis auf das erforderliche Format geben. Z.B. DD-MM-YYYY (Das versteht dann sogar ein Amerikaner)
Alle Versuche eine halbwegs "schlaue" Datumserkennung umzusetzen scheitern natürlich spätestens an 06-07-09
Mögliche Interpretationen wären dann z.B.
6. Juli 1909
6. Juli 2009
9. Juli 1906
7. Juni 1909
Ich persönlich finde ein Textfeld zur Eingabe eines Datums jedenfalls angenehmer als drei Selektboxen.
Viele Grüße
lulu
Hi,
Aber ich denke das man für viele Einsatzbereiche davon ausgehen kann das ein europäisches Format benutzt wird.
May 5,2003
Wann immer User die Möglichkeit hat, was von Hand einzutragen, mußt Du mit allem rechnen.
cu,
Andreas