Aus Restzeit die Endzeit berechnen

Trash

Erfahrenes Mitglied
Hallo,
wenn ich eine Restzeit in Sekunden habe (z.B. 86400 für einen Tag), kann ich mit PHP mit einer Funktion irgendwie ermitteln, wieviele Tage, Stunden, Minuten das sind? Ich denke da an so etwas:

$remainingDays = date("j",86400); //erg 1
$remainingMins = date("i",86400); // erg 0 oder 24

Gibts da etwas?
 
genau für sowas wär mir da nichts bekannt, nur ist doch ne schöne Sache sowas selbst zu schreiben;) du teilst das ganze durch 24 das Ergebnis(Ganzzahl) sind die Tage, den Rest teilst du durch 60 für die Minuten und das gleiche nochmal für die Sekunden.

Ich hoff ich hab jetzt keinen Logik Fehler drin aber dürft schon passen;)
 
Doch, ist ein kleiner Logikfehler ;)

Hier mal meine Funktion:

PHP:
function remTime($time)
{
  $remTime = array(
    'days'    => 0,
    'hours'   => 0,
    'minutes' => 0,
    'seconds' => 0
  );
  
  if($time > 86400)
  {
    $remTime['days'] = round( $time / 86400 );
    $time = $time - ( $remTime['days'] * 86400 );
  }
  if($time > 3600)
  {
    $remTime['hours'] = ( $time / 3600 );
    $time = $time - ( $remTime['hours'] * 3600 );
  }
  if(time > 60)
  {
    $remTime['minutes'] = ( $time / 60 );
    $time = $time - ( $remTime['minutes'] * 60 );
  }
  if($time > 0)
  {
    $remTime['seconds'] = ( $time > 0 ? $time : '0' );
  }
  
  return $remTime;
}

var_dump(remTime(93600));

Und ab PHP 5.2 geht das ganze natürlich nochmal leichter...

Siehe z. B. hier:
php.net Kommentar
 
jap war ein Logik Fehler, sogar ein ganz gewaltiger;) Hab das ganze jetzt auch mal kurz noch ausprobiert, war nicht ganz so einfach wie zuerst gedacht;).

Bin letztendlich auf fast auf eine solche Lösung gekommen wie du.
 
Die letzte Zeile kann man auch so sparen, da fällt dann die doppelte if-Abfrage raus:
PHP:
if($time > 0)
  {
    $remTime['seconds'] = $time;
  }
Außerdem sollte man statt round() lieber floor() nehmen. Eigentlich kann man sich die ganzen if-Abfragen sparen ;)

Das ergibt dann:
PHP:
function remTime($time){
  $remTime = array('days'    => 0, 'hours'   => 0, 'minutes' => 0, 'seconds' => 0);
  $remTime['days'] = floor( $time / 86400 );
  $time = $time - ( $remTime['days'] * 86400 );
  $remTime['hours'] = floor( $time / 3600 );
  $time = $time - ( $remTime['hours'] * 3600 );
  $remTime['minutes'] = floor( $time / 60 );
  $time = $time - ( $remTime['minutes'] * 60 );  
  $remTime['seconds'] = $time;
  return $remTime;
}

var_dump(remTime(93600));
 
Zurück