Raffi: Datumsfeld in MySQL Datenbank speichern

Hallo Leute

Ich habe ein Formular mit einem Textfeld. Dort soll das Datum im Format: 01.01.04 oder 01.01.2004 oder 1.1.04 eingegeben werden können. Danach wird es in der MySQL Datenbank gespeichert, wo die Splate als date formatiert ist.

Nun solange ich das Datum 2004.01.01 eingebe ist es kein Problem. Wie kann ich die eingabe so umformatieren, damit das Datum korrekt in der DB gespeichert wird?

Bei der Ausgabe habe ich es folgendermassen gelöst, nur bei der Eingabe geht das irgendwie nicht:

$datum = strtotime($datum);
$datum = date("d.m.Y",$datum);

$zeit = strtotime($zeit);
$zeit = date("H:i",$zeit);

Danke und Gruss
Raffi

  1. Hallo,

    Lies die Manuals zu den Datumsfunktionen u.s.w. nochmals genau.

    Wahrscheinlich hast Du Probleme mit den verschiedenen Reihenfolgen.
    "01.04.2003" ist nicht eindeutig.
    Fuer "uns" (Schweizer, Deutsche und einige andere Europaer) ist das
    der erste April, fuer US-Amerikaner und viele Programmiersprachen
    ist das aber der vierte Januar...

    Um ein Datum vom "Deutschen" Format "DD.MM.YYYY"
    ins MySQL-Format "YYYY-MM-DD" umzuwandeln, nimmst
    Du am besten ein paar geeignete String-Funktionen.

    PHP-Manual: String-Funktionen:
    http://www.php.net/manual/de/ref.strings.php

    PHP-Manual: Datums- und Zeit-Funktionen:
    http://www.php.net/manual/de/ref.datetime.php

    Gruesse,

    Thomas

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
    1. Das ist mir schon klar, das wir Eurupäer das so verwenden.

      Aber warum kann ich das nicht wie bei der Ausgabe so umformen?

      Gruss
      raffi

      1. Hallo,

        Das ist mir schon klar, das wir Eurupäer das so verwenden.
        Aber warum kann ich das nicht wie bei der Ausgabe so umformen?

        Weil Du das f* Manual zu strtotime() nicht richtig gelesen hast
        und versuchst, dieser Funktion ein "deutsches" Datum zu fuettern.

        http://www.php.net/manual/de/function.strtotime.php
        int strtotime ( string time [, int now])
          "Diese Funktion erwartet einen String mit einem Datum im
          englischen Format und versucht diesen in einen Unix-Timestamp
          umzuwandeln.
          [...]
          Die Funktion strtotime() verhält sich gemäß der
          Syntax von GNU Date. Daher sollten Sie einen Blick in die
          GNU Manual Seite Date Input Formats
          http://www.gnu.org/software/tar/manual/html_chapter/tar_7.html
          werfen. Dort wird die gültige Syntax für time beschrieben."

        Wer lesen kann, ist im Vorteil...

        Gruesse,

        Thomas

        --
        Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
        Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
        Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
  2. Hier ein Beispiel:
    einfach die funktion irgendwo in das script haun am besten am anfang und dann die funktion auf die variable anwenden. z.B. $datum = $chdate($datum);

    //Funktionsbeispiel zum ändern in das Mysql DATE format
        function chdate($text1)
        {
            $match1 = "/[1]+.[0-9]+.[0-9]+/i";
            $match2 = "/[2]+-[0-9]+-[0-9]+/i";

    if(preg_match($match1, $text1))
            {
                $text2 = explode(".", $text1);
                return $text2[2] ."-". $text2[1] ."-". $text2[0];
            }
            elseif(preg_match($match2, $text1))
            {
                $text2 = explode("-", $text1);
                return $text2[2] .".". $text2[1] .".". $text2[0];
            }

    }


    1. 0-9 ↩︎

    2. 0-9 ↩︎