Lutz Fechner: Vergangene Zeit - Funktion?

Hallo,

ich lese aus einer Datenbank 2 Timestamps aus, der Betrag der Differenz der beiden ist folglich der zeitliche Abstanz zwischen ihnen in Sekunden.

Jetzt möchte ich aber natürlich nicht angezeigt bekommen:

->  Ereignis A lag 3661 Sekunden vor Ereignis B

sondern etwa so etwas:

-> Ereignis A lag 01:01:01 Stunden:Minuten:Sekunden vor Ereignis B

Dabei soll natürlich der Stundenzähler auch weiter gehen als 24, so dass folgende Anzeige denkbar ist:

277:12:13, also 277 Stunden, 12 Minuten, 13 Sekunden.

Die Funktion date() hat mir da nicht viel weitergeholfen, das bezieht sich alles ehr auf Uhrzeiten, gibt es da ne Funktion für oder muss ich selber umständlich erst durch 3600 teilen, was übrigbleibt durch 60 und dann den Rest speichern, um diese 3 Zahlen zu erhalten?

Lutz

  1. Ich habe mir jetzt mal provisorische eine (zugegeben dahingesaute) Funktion gebastelt, die genau das macht, was ich suche. Ich poste sie hier unten mal, damit vielleicht klarer wird, was ich versucht habe, auszudrücken

    Es sieht nicht schön aus und ich kann mir nicht vorstellen, dass es da in PHP nichts gibt. Also bitte helft mir!

    function buildtime ($stamp)  {
      $dummy = fmod($stamp, 3600);
      $hours = ($stamp-$dummy)/3600;
      $dummy2 = fmod($dummy, 60);
      $minutes = ($dummy-$dummy2)/60;
      if ($minutes<10) $minutes="0".$minutes;
      $seconds = $dummy2;
      if ($seconds<10) $seconds="0".$seconds;
      $finished= $hours.":".$minutes.",".$seconds;
      return $finished;
    }

    1. Hallo Lutz

      Ich programmiere ein Browser Online Game und war wie du auch vor diesem Problem gestanden !

      Darum habe ich mir diese Funktion gebaut (ACHTUNG ! PHP5 Code !!!):
      [code=PHP]
      /**
       * Errechnet aus einer Zeit in Sekunden die Dauer z.B.: 600 => "00:10:00"
       *
       * @access public
       * @static
       * @param int $seconds
       *
       * @return string
       */
      public static function sec_to_time($seconds)
      {
       $seconds = round($seconds);
       $days   = floor($seconds / 86400);
       $seconds -= 86400 * $days;

      $hours  = floor($seconds / 3600);
       $seconds -= 3600 * $hours;

      $minutes = floor($seconds / 60);
       $seconds -= 60 * $minutes;

      if ($minutes < 10) {
        $minutes = "0" . $minutes;
       }
       if ($seconds < 10) {
        $seconds = "0" . $seconds;
       }
       $time = $hours . ":" . $minutes . ":" . $seconds;

      if ($days != 0) {
        if ($days == 1) {
         $time = $days . " Tag, " . $time;
        } else {
         $time = $days . " Tage, " . $time;
        }
       }
       return $time;
      }
      [/code]

      um das ganze PHP4 fähig zu machen, muss tu einfach "public static" vor "function" entfernen ;)

    2. echo $begrüßung;

      Es sieht nicht schön aus und ich kann mir nicht vorstellen, dass es da in PHP nichts gibt.

      PHP hat zwar Funktionen für vieles, aber doch nicht für alles. Dein Problem scheint keins von allzugroßem Interesse zu sein. Du brauchst die Angabe in Stunden, die Userkommentatoren zu date() scheinen nur eine Anzahl von Tagen zu benötigen. Wieder andere wollen vielleicht Minuten, Monate, Jahre...

      In PEAR gibt ein Paket namens Date. Die darin enthaltene Klasse Date_Span kann Zeitdifferenzen in Sekunden bis Tage umrechnen.

      echo "$verabschiedung $name";