zimt: Datum in Timestamp umwandeln

Beitrag lesen

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' )" );

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