Tage Differenz berechnen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abgespeichert
benutzer
berechnung
bindestrich
count
daten
differenz
erweiterung
format
funktion
geschehen
hole
kalender
login
manual
minus
monat
result
vorteil
zeile
-
Moin!
Ich habe ein PHP-Problem. Ich m?chte berechnen, wie lange ein Benutzer nicht auf der Website war und speichere die Login-Zeit im Format "datetime" in einer DB. Dann kommt sowas rein wie "2005-10-28 20:40:27".
Die jetzige Zeit hole ich immer aus der Datenbank, mit
$result = mysql_query("SELECT NOW() ");
while ($zeile = mysql_fetch_array($result))
{ $jetzt = $zeile[0]; }
Wie kann ich eine Differenz der beiden Daten bilden, sodass ich wei?, ob ein User z.B. ?ber 30 Tage nicht bei mir war?
MfG lagerhaus -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Es w?re von Vorteil, wenn die Zeitangaben in der Datenbank als timestamp abgespeichert w?rden, da man so die Differenzen besser berechnen kann.
Ansonsten musst Du das Datum bei jedem Bindestrich "-" zerhackst?ckeln und es vom aktuellen Datum minus rechnen. Das h?rt sich einfacher an als es ist; denn wenn ein User l?nger als einen Monat nicht mehr auf der Seite war, kann es geschehen, dass eine falsche Anzahl Tage angezeigt wird.
Das folgende Script subtrahiert zwei Daten (nicht Timestamps):
$aktuell ist ein Array, in dem das aktuelle Datum gespeichert ist. Format: Y-m-d-H-i-s
$ziel ist das "Zieldatum" - das Datum, das bei Dir in der Datenbank gespeichert w?re.
for($i=count($aktuell) - 1; $i >= 0; $i--) { if($ziel[$i] < $aktuell[$i]) { if($i == 5) { $ziel[$i-1]--; $ziel[$i] += 60; } if($i == 4) { $ziel[$i-1]--; $ziel[$i] += 60; } if($i == 3) { $ziel[$i-1]--; $ziel[$i] += 24; } if($i == 2) { $ziel[$i-1]--; $ziel[$i] += monat($ziel[1], $ziel[0]); } if($i == 1) { $ziel[$i-1]--; $ziel[$i] += 12; } } $differenz[$i] = $ziel[$i] - $aktuell[$i]; } function monat($month, $year) { if($year / 4 != 0 && $month == 2) { return 29; } else { $monate = array(31, 28, 31, 30, 31, 30,31,31, 30, 31, 30, 31); return $monate[$month-1]; } }
-
Benutze statt des Timestamps die Julianische Tagesnummer (JDN, manchmal auch f?lschlischerweise Julianisches Datum genannt).
Dann brauchst du zur Berechnung der Differenz nur das kleinere Datum vom h?heren Datum abzuziehen und erh?ltst automatisch die Differenz in Tagen.
Ein paar Erkl?rungen findest du unter:
http://de.php.net/manual/de/ref.calendar.php
Die Calendar-Erweiterung ist aber auf Lima-Webspace nicht eingebunden. Um trotzdem die Tagesnummern berechnen zu k?nnen, kannst du die Funktion date_to_jdn() aus meiner Datumsbibliothek benutzen.
http://alopex.pyrokar.lima-city.de/index.php/PHP/Kalender.html
MfG
alopex -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage