martin: Datum über INPUT einlesen und später auseinander nehmen

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

  1. 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

  2. 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:

    1. 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

      --
      Sollen sich alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen und nicht mehr davon erfasst haben als eine Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst.
                            -- Albert Einstein
  3. 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

    --
    Der Optimist: Das Glas  ist halbvoll.
    Der Pessimist: Das Glas ist halbleer.
    Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
  4. 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

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. 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

      --
      Der Optimist: Das Glas  ist halbvoll.
      Der Pessimist: Das Glas ist halbleer.
      Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
      1. 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

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. 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

          --
          Der Optimist: Das Glas  ist halbvoll.
          Der Pessimist: Das Glas ist halbleer.
          Der Ingenieur: Das Glas ist doppelt so groß wie nötig.