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
PHP date() auf Zurückliegen überprüfen
-
Unregistriert -
31. März 2013 um 19:34
-
-
Das macht man mit http://www.php.net/manual/de/datetime.diff.php.
Wenn es ein Ergebnis aus einer Datenbank sein soll, geht das auch mit einer SQL-Abfrage.
-
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
-
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. -
und wieder einmal möchte ich hinweisen auf die vielen klassen, die man kostenlos bekommen kann
-
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 24Nur verstehe ich nicht was ich falsch gemacht haben soll.
Danke -
-
Oh das sollte das heutige Datum sein -
dann wird dir wohl der zweite parameter der date-function fehlen, ein blick in die doku wirkt wunder.
außerdem schau dir mal etwas genauer an, wie man dateobjekte erzeugt -
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.phpschaus 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.
-
Ok, hab die Doku gelesen und hab's nun so gemacht - es funzt 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 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.