Matze: Datum in Timestamp umwandeln

Hi,

entweder bin ich grad bisschen blöd oder einfach nur verwirrt *fg*

Ein User gibt im Feld Geburtstag sein B-Day ein (Im Format 09.02.2001)

Wie kann ich dieses Datum in ein Timestamp umwandeln??

Denn ich möchte es als Timestamp in die Datenbank schreiben, damit ist die Arbeit um einiges leichter.

Vielen Dank für Eure Hilfe.

Grüße aus dem kalten Stuttgart

  1. hi,

    Wie kann ich dieses Datum in ein Timestamp umwandeln??

    mktime(), strtotime(). bei letzterem format beachten.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. hi,

      Wie kann ich dieses Datum in ein Timestamp umwandeln??

      mktime(), strtotime(). bei letzterem format beachten.

      gruß,
      wahsaga

      könnt ihr mir da mal ein beispiel machen? also ein beispiel script...
      irgendwie krieg ich das nich auf die reihe...

      in $datum steht das datum (im format z.b. 01.01.2001)

      $time = mktime(...???

      1. hi,

        könnt ihr mir da mal ein beispiel machen? also ein beispiel script...
        irgendwie krieg ich das nich auf die reihe...

        *seufz* die ewige leier ... "kannichnich, brauchwasfertiges".

        in $datum steht das datum (im format z.b. 01.01.2001)

        $time = mktime(...???

        Tobias hatte dir noch explode() vrogeschlagen.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. Hallo Matze,

    Ein User gibt im Feld Geburtstag sein B-Day ein (Im Format 09.02.2001)
    Wie kann ich dieses Datum in ein Timestamp umwandeln??

    explode() und mktime() sollten helfen.

    Denn ich möchte es als Timestamp in die Datenbank schreiben,

    aber in eine Spalte mit einem Datumstype, oder?

    Grüße aus Nürnberg
    Tobias

  3. Ein User gibt im Feld Geburtstag sein B-Day ein (Im Format 09.02.2001)
    Wie kann ich dieses Datum in ein Timestamp umwandeln??

    Denn ich möchte es als Timestamp in die Datenbank schreiben, damit ist die Arbeit um einiges leichter.

    Unix-Timestamps sind nur möglich für Daten ab 1.1.1970. Schlecht bei Geburtstagen, denke ich...

    Ich würde für die Tabelle in der DB sowieso eher eine DATE-Spalte empfehlen. Also CREATE TABLE xyz( ..., Datum DATE, ... )

    Das Verarbeiten der User-Eingabe ist nicht ganz ohne, weil es keine Funktion gibt, die ein Datum in diesem Format überprüft und liest. Also z.B. folgende Funktion selbst definieren:

    ---------------------------------------------------------------------------------------

    // Die Funktion gibt bei fehlerhaftem Datum false, anonsten MySQL-
    // formatierten Datums-String zurück ( YYYY-MM-DD )
    function datum_de2sql( $datum )
    {
             // 'explode()' gibt ein Array aus Teilstrings zurück. Jeder String im Array
             // ist ein Teil des übergebenen Strings (zweiter Parameter), für das
             // 'Zerstückeln' sucht 'explode()' nach dem Trennzeichen, das als erster
             // Parameter angegeben wird.
        $teile = explode( '.', $datum );

    // Test ob drei durch Punkt getrennte Bestandteile in der Datumsangabe
             // waren (auch wenn das Jahr weggelassen wurde, steht nach dem Monat ein
             // Punkt und es gibt somit einen Leerstring als dritten Bestandteil)
        if( sizeof( $teile ) != 3 ) return( false );

    // Wenn Jahr nicht angegeben -> aktuelles Jahr holen
        if( $teile[2] == '' ) $teile[2] = date( 'Y' );
            // Wenn Jahr kleiner 100 -> 2000 dazu addieren
        else if( $teile[2] < 100 ) $teile[2] += 2000;

    // Überprüfen, ob Datum existiert. 'checkdate()' bekommt (in dieser
            // Reihenfolge) Monat, Tag und Jahr übergeben und liefert true, wenn
            // das Datum ok ist oder sonst false (es wird auch der Februar abhängig
            // von Schaltjahren geprüft).
        if( !checkdate( $teile[1], $teile[0], $teile[2] ) ) return( false );

    // Konstruieren des Datums-Strings im MySQL-Format und Rückgabe dieses Strings
        return( sprintf( '%d-%02d-%02d', $teile[2], $teile[1], $teile[0] ) );
    }

    ---------------------------------------------------------------------------------------

    Wenn es unbedingt ein Timestamp sein muss, müsste die letzte Zeile der Funktion so aussehen:

    ---------------------------------------------------------------------------------------
        // mktime() generiert einen Unix-Timestamp aus Stunde, Minute, Sekundem, Monat, Tag, Jahr
    return( mktime( 0, 0, 0, $teile[1], $teile[0], $teile[2] ) );

    ---------------------------------------------------------------------------------------

    Aufruf dann z.B. so:

    ---------------------------------------------------------------------------------------

    $eingabe = '11.02.1769';
    $sql_datum = datum_de2sql( $eingabe );
    if( !$sql_datum ) die( 'Datum nicht korrekt!' );
    mysql_query( "INSERT INTO xyz( Datum ) VALUES( '$sql_datum' )" );

    ---------------------------------------------------------------------------------------