String formatieren

msycho

Erfahrenes Mitglied
Hallo!

Ich habe eine function geschrieben, die mir die Downloadzeit eines Files errechnet.

Hier mal das eigentliche Herz.

PHP:
$divisors = array("DSL16000" => 16384, 
                    "DSL6000" => 6164,
                    "DSL2000" => 2048, 
                    "DSL1000" => 1024, 
                    "ISDN" => 64,
                    "Modem" => 56);

foreach($divisors as $type=>$divisor) {
        $seconds[$i] = round($bits/($divisor*1024));        
        $hours[$i] = floor($seconds[$i]/3600);        
        $minutes[$i] = floor(($seconds[$i]-($hours[$i]*3600))/60);        
        $seconds[$i] = $seconds[$i]-floor($minutes[$i]*60);             
        $hms[$i] = sprintf("%s (%d kbps): %02d:%02d:%02d", $type, $divisor, $hours[$i], $minutes[$i], $seconds[$i]);           
        $i++;
      }

Nun zum Problem. Ich veranschauliche das mal an zwei Beispielen:
1.) ca. 5,5 MB große Datei. Ausgabe:

DSL16000 (16384 kbps): 00:00:03
DSL6000 (6164 kbps): 00:00:07
DSL2000 (2048 kbps): 00:00:22
DSL1000 (1024 kbps): 00:00:44
ISDN (64 kbps): 00:11:48
Modem (56 kbps): 00:13:29

2.) ca. 940 MB große Datei. Ausgabe:

DSL16000 (16384 kbps): 00:07:49
DSL6000 (6164 kbps): 00:20:45
DSL2000 (2048 kbps): 01:02:3628
DSL1000 (1024 kbps): 02:04:7257
ISDN (64 kbps): 33:19:118812
Modem (56 kbps): 38:04:136848

Wieso haben im zweiten Beispiel die Sekunden teilweise mehr als zwei Stellen?

Habt Ihr eine Idee?
 
Du berechnest das irgendwie falsch. Probier mal Folgendes:
PHP:
foreach( $divisors as $type=>$divisor ) {
	$seconds[$i] = floor($bits/($divisor*1024));
	$hours[$i]   = floor($seconds[$i]/3600);
	$minutes[$i] = floor($seconds[$i]/60) % 60;
	$seconds[$i] = $seconds[$i] % 60;
	$hms[$i] = sprintf("%s (%d kbps): %02d:%02d:%02d", $type, $divisor, $hours[$i], $minutes[$i], $seconds[$i]);
	$i++;
}
 
Zurück