PHP date() auf Zurückliegen überprüfen

  • Hallo liebe Community,
    ich brauche mal eure Hilfe. Es geht um Folgendes:
    Ich habe zwei Daten gegeben. Zum einem das Datum von heute und zum anderen das Datum des letzten Logins. Wie kann ich nun überprüfen, ob das Datum des letzten Logins länger als sechs Tage zurückliegt?
    Ich habe bereits seit Stunden im Internet gesucht, finde aber nichts Passendes.
    Vielen Dank im Voraus,
    Anonymous


  • Ich habe bereits seit Stunden im Internet gesucht, finde aber nichts Passendes.


    Leute, tut mir einen Gefallen und schreibt nicht so einen Quatsch. Man muss sich nur mal die Datumsfunktionen in der Doku ansehen und schon findet man eine Lösung, denn dort gibt's nämlich auch massenhaft Beispiele.

    Was du brauchst sind Timestamps. Den aktuellen Timestamp bekommst du mit time() und für ein bestimmtes Datum kann man mktime nehmen. Alternativ geht auch date_diff

    Siehe http://www.php.net/manual/de/ref.datetime.php

  • Um Zeitdifferenzen in Sekunden/Minuten/Stunden zu berechnen kann man noch zu mktime() greifen.
    Wenn es um Zeitdifferenzen als Tage/Wochen/Monate geht ist davon aber dringend abzuraten, da sollte das von explanator verlinkte datetimediff verwendet werden, damit man sich nicht selber Gedanken um Zeitumstellungen, Schaltjahre u.ä. machen muss.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Hey, vielen Dank. Ich habe mir etwas gebastelt. Nur leider kommt nach Einsetzen des richtigen Datums ein Fehler :(
    Hier mal ein Ausschnitt:

    sel_log=mysql_query("SELECT * FROM log WHERE user_ID=$dieid");
    $sel_log_array=mysql_fetch_array($sel_log);
    $datetime1 = date("Y-m-d");
    $datetime2 = $sel_log_array['date']; // Soll das Date, das man vergleichen will sein
    $interval = $datetime1->diff($datetime2);
    if ($interval->format('%R%a days')>6) {
    echo "Du hast dich vor mehr als 6 Tagen das letzte Mal angemeldet. XD";
    }

    Und dann kommt die Fehlermeldung:
    Fatal error: Call to a member function diff() on a non-object in /customers/5/a/6/http://lol.de/httpd.www/login.php on line 24

    Nur verstehe ich nicht was ich falsch gemacht haben soll.
    Danke :)

  • Hä, aber ich verstehe das gar nicht. Denn wenn ich mir das Datum mit der date()-Funktion benutzen lasse, wird das auch vollkommen korrekt in die Datenbank eingetragen. Wieso funktioniert das jetzt nicht? :(
    Ich benütze das immer so:
    <?php
    $date = date("Y-m-d");
    //Ich hab das Date und jetzt ab in die Database. Wenn's wieder raus soll, formatier ich es mit strotime
    $ins_qu=mysql_query("INSERT INTO lol (date) VALUES ('$date')");
    ?>
    ?

  • ach so... sorry, mein fehler. ich hatte im kopf dass du aus nem zeitstempel das datum generieren wolltest. und nicht direkt aus der aktuellen zeit.
    kommt davon, wenn man zwischen tür und angel beiträge kommentiert..^^

    aber die fehlermeldung besagte dass dir das datetimeobjekt fehlt, um die diff-funktion aufzurufen.
    du musst von dieser klasse hier ein objekt erzeugen:
    http://www.php.net/manual/de/class.datetime.php

    schaus dir mal an :)

  • Das Handbuch scheint wohl zu kompliziert zu sein, daher hier noch mal etwas anders formuliert:

    date( Formatanweisung ohne Bezug)

    Das würde das heutige Datum benutzen, daher kannst du das auch in die Datenbank schreiben.
    Wenn aber in der Datenbank so was wie 2002-11-11 steht geht das mit dem date naturgemäss nicht mehr.


    Siehe auch Beispiel #4 zu date im Handbuch.

    EDIT: Sorry, hatte das mit Wenn's wieder raus soll, formatier ich es mit strotime, glatt überlesen.

    Einmal editiert, zuletzt von explanator (1. April 2013 um 17:36)

  • Ok, hab die Doku gelesen und hab's nun so gemacht - es funzt :D Danke trotzdem Gebrüder :)

    $days = floor((time() - strtotime($sel_log_array['date']))/86400);

    if ($days>6) {
    //JO
    }

  • Ok, hab die Doku gelesen und hab's nun so gemacht - es funzt :D Danke trotzdem Gebrüder :)

    $days = floor((time() - strtotime($sel_log_array['date']))/86400);

    if ($days>6) {
    //JO
    }

    Der Code ist falsch, da nicht jeder Tag 24 Stunden hat.
    Nutze das von Explanator verlinkte DateTimeDiff wenn du nicht aus Faulheit eine schlechte und vor allem falsche Lösung verwenden willst.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

    Einmal editiert, zuletzt von SinnlosS (3. April 2013 um 16:57)