kostenloser Webspace werbefrei: lima-city


Tage Differenz berechnen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    lagerhaus

    Kostenloser Webspace von lagerhaus

    lagerhaus hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hi Lagerhaus,

    ich hab mal kurz bei php.net gesucht. Da hat mal jemand eine DateDiff-funktion gepostet, probiers mal damit:

    http://de2.php.net/manual/de/ref.datetime.php#53670

    greets
    Coh3r3nT
  4. c*********c

    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];
    	}
    }
  5. 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
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!