kostenloser Webspace werbefrei: lima-city


Rechnen mit Zeit

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    dammasch

    Kostenloser Webspace von dammasch, auf Homepage erstellen warten

    dammasch hat kostenlosen Webspace.

    Hallo Kommunity!

    Ich würde gerne mit MySQL und PHP anzeigen lassen wie lange es her ist dass sich ein User eingeloggt hat.
    Da ich mit MySQL erst vor ein paar Tagen angefangen habe weiss ich nicht wie ich mit den Zeitbefehlen vorgehen soll, bisher habe ich nur mit $timestamp gearbeitet.

    Auf der Loginseite möchte ich den Befehl einzetzen, welcher die aktuelle Zeit in die Datenbank schreibt.
    Nachher soll auf einer anderen Seite mit der aktuellen Zeit und der Zeit in der Datenbank ausgerechnet werden wie lange der Login her ist.

    Könnt ihr mir helfen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. MySQL hat ebenfalls eine Timestamp-Funktion.

    http://dev.mysql.com/doc/refman/5.1/de/timestamp-4-1.html

    Andererseits könntest du den timestamp natürlich auch aus php übernehmen und nur als string speichern ;)
  4. Autor dieses Themas

    dammasch

    Kostenloser Webspace von dammasch, auf Homepage erstellen warten

    dammasch hat kostenlosen Webspace.

    Das habe ich grade versucht, mit meinem Script scheint allerdings etwas nicht zu stimmen, meinchmal werden die Zeiten falsch angezeigt.

    Hier das Script:
    $timestamp = time();
     $speicher = ($row->login);
     $zeit = ($timestamp - $speicher);
    
    
      while($zeit >= 3600)
      {
       $zeit = ($zeit - 3600);
       $stunde = ($stunde + 1);
      }
      while($zeit >= 60)
      {
       $zeit = ($zeit - 60);
       $minute = ($minute + 1);
      }
    
      if($stunde == 1){ $stunden = 'Stunde'; }
      if($stunde > 1){ $stunden = 'Stunden'; }
      if($minute == 1){ $minuten = 'Minute'; }
      if($minute > 1){ $minuten = 'Minuten'; }
      if($zeit == 1){ $sekunden = 'Sekunde'; }
      if($zeit == 0){ $sekunden = 'Sekunden'; }
      if($zeit > 1){ $sekunden = 'Sekunden'; }
  5. Gebe mal jede variable aus und rechne notfalls händisch nach.
    Was wird Falsch angezeigt und wie?

    Nebenbei würde ich die while-Konsturkte durch Modulo-Operationen ersetzten. Geht schneller.

    Und ich hab das mal ein kleinwenig optimiert, also die ifabfragen.
    $timestamp = time();
     $speicher = ($row->login);
     $zeit = ($timestamp - $speicher);
    
    
     while($zeit >= 3600)
     {
     $zeit = ($zeit - 3600);
     $stunde = ($stunde + 1);
     }
     while($zeit >= 60)
     {
     $zeit = ($zeit - 60);
     $minute = ($minute + 1);
     }
    
     if($stunde == 1){ $stunden = 'Stunde'; }
     elseif($stunde > 1){ $stunden = 'Stunden'; }
     if($minute == 1){ $minuten = 'Minute'; }
     elseif($minute > 1){ $minuten = 'Minuten'; }
     if($zeit == 1){ $sekunden = 'Sekunde'; }
     elseif($zeit <> 1){ $sekunden = 'Sekunden'; }
  6. Autor dieses Themas

    dammasch

    Kostenloser Webspace von dammasch, auf Homepage erstellen warten

    dammasch hat kostenlosen Webspace.

    Das Problem ist grade wieder aufgetaucht.
    Ein User ist vor kurzem online gegangen und bei ihm wird fast die gleiche Zeit wie bei einem anderen User ausgegeben, welcher allerdings gestern oder vorgestern das letzte mal online war.

    User1: - 48 Stunden 40 Minuten 32 Sekunden - 1222158407
    User2: - 48 Stunden 61 Minuten 44 Sekunden - 1222240115

    Woran liegt das?
  7. Es empfiehlt sich wie nerdinator schon zu Recht empfohlen hat, immer TIMESTAMP in MySQL für sowas zu nutzen ... da du damit viel bequemer in der SQL-Query selbst deine Abfragen durchführen kannst. Somit umgeht man das nachträgliche gefuddel mit PHP :D




    Gruß
    webwalker



    Beitrag geändert: 24.9.2008 10:12:49 von webwalker
  8. Hi,
    gib einfach mal die Variablen aus:
    $timestamp = time();
    $speicher = ($row->login);
    $zeit = ($timestamp - $speicher);
    
    echo $timestamp."<br>";
    echo $speicher."<br>";
    echo $zeit."<br>";
    
    // ...


    Dann siehste auch was aus der Datenbank kommt, was time dir liefert und ob die Berechnung klappt ;-)

    Grüßle


    Beitrag geändert: 24.9.2008 10:20:47 von scout
  9. Autor dieses Themas

    dammasch

    Kostenloser Webspace von dammasch, auf Homepage erstellen warten

    dammasch hat kostenlosen Webspace.

    Der Timestamp wird nicht ausgegeben, die gespeicherten Stamps stimmen und die restlichen Sekunden stimmen an sich auch.

    Diese Zeit ist vorhin ausgegeben worden:
    52 Stunden 80 Minuten 31 Sekunden
    (der User hat sich heute angemeldet und die 80 Minuten müssten eh umgerechnet werden...)

    webwalker schrieb:
    Es empfiehlt sich wie nerdinator schon zu Recht empfohlen hat, immer TIMESTAMP in MySQL für sowas zu nutzen ... da du damit viel bequemer in der SQL-Query selbst deine Abfragen durchführen kannst. Somit umgeht man das nachträgliche gefuddel mit PHP :D

    Gruß
    webwalker

    Beitrag geändert: 24.9.2008 10:12:49 von webwalker


    Wie kann ich das denn mit dem MySQL-Timestamp umsetzen?
  10. Autor dieses Themas

    dammasch

    Kostenloser Webspace von dammasch, auf Homepage erstellen warten

    dammasch hat kostenlosen Webspace.

    Durch Zufall habe ich den Fehler grade entdeckt.
    Da ich in jedem Durchgang die Stunden und Minuten hochzähle muss ich sie vor dem nächsten Durchlauf wieder zurücksetzen :P

    $timestamp = time();
     $speicher = ($row->login);
     $stunde = "";
     $minute = "";
     $zeit = ($timestamp - $speicher);
    
    
      while($zeit >= 3600)
      {
       $zeit = ($zeit - 3600);
       $stunde = ($stunde + 1);
      }
      while($zeit >= 60)
      {
       $zeit = ($zeit - 60);
       $minute = ($minute + 1);
      }
    
      if($stunde == 1){ $stunden = 'Stunde'; }
      if($stunde > 1){ $stunden = 'Stunden'; }
      if($minute == 1){ $minuten = 'Minute'; }
      if($minute > 1){ $minuten = 'Minuten'; }
      if($zeit == 1){ $sekunden = 'Sekunde'; }
      if($zeit == 0){ $sekunden = 'Sekunden'; }
      if($zeit > 1){ $sekunden = 'Sekunden'; }
  11. Für sowas empfiehlt sich immer ein error_reporting(E_ALL); - dann hätte er Dir wahrscheinlich gleich gesagt, dass du nicht initialisierte Variablen hast ;)
  12. Autor dieses Themas

    dammasch

    Kostenloser Webspace von dammasch, auf Homepage erstellen warten

    dammasch hat kostenlosen Webspace.

    Hmm error_reporting(E_ALL); kannte ich noch nicht, danke ;)
  13. 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!