2012-12-14 6 views
1

Ok, donc j'avoir cette fonction:Conversion millisecondes négatives en un format lisible en PHP

function convertTime($ms){ 

    $sec = floor($ms/1000); 
    $ms = $ms % 1000; 

    $min = floor($sec/60); 
    $sec = $sec % 60; 
    $t = $sec; 

    $hr = floor($min/60); 
    $min = $min % 60; 
    $t = $min; 

    $day = floor($hr/60); 
    $hr = $hr % 60; 
    $t = $hr . " h " . $t . " m"; 

    return $t; 
} 

Il convertit en millisecondes h: m et il fonctionne très bien avec des chiffres positifs. Exemple:

echo convertTime(60000);  // outputs: 0 h 1 m 
echo convertTime(60000*70); // outputs: 1 h 10 m 
echo convertTime(60000*60*48); // outputs: 48 h 0 m 

(je ne veux pas à convertir en jours de sorte que son grand qu'il montre le nombre réel d'heures) Malheureusement, il ne fonctionne pas très bien avec les nombres négatifs ...

echo convertTime(-60000); //outputs: -1 h -1 m (should be 0 h -1 m) 

Des idées sur la façon de compenser cela?

+2

Que voulez-vous avoir comme résultat? 1h 1m ou 22h 59m? – AgeDeO

+0

echo convertTime (-60000); // Doit sortir: 0 h -1 m – Alice

+0

que diriez-vous de 'echo" - ". ConvertTime (60000);': P – jurgemaister

Répondre

0

Voici votre fonction d'origine, mis en forme, les lignes inutiles enlevés et trois lignes ajouté:

function convertTime($ms) 
{ 
    $sign = $ms < 0 ? "-" : ""; 
    $ms = abs($ms); 
    $sec = floor($ms/1000); 
    $ms = $ms % 1000; 
    $min = floor($sec/60); 
    $sec = $sec % 60; 
    $hr = floor($min/60); 
    $min = $min % 60; 
    $day = floor($hr/60); 
    $hr = $hr % 60; 
    return "$sign$hr h $min m"; 
} 
echo convertTime(+60000);  // 0 h 1 m 
echo convertTime(-60000);  // -0 h 1 m 
echo convertTime(-60000 * 60); // -1 h 0 m 

Voici ma version de la même fonction:

function convertTime($ms) 
{ 
    $xx = $ms < 0 ? "-" : "+"; 
    $ms = abs($ms); 
    $ss = floor($ms/1000); 
    $ms = $ms % 1000; 
    $mm = floor($ss/60); 
    $ss = $ss % 60; 
    $hh = floor($mm/60); 
    $mm = $mm % 60; 
    $dd = floor($hh/24); 
    $hh = $hh % 24; 
    return sprintf("%s%dd %02dh %02dm %02d.%04ds", $xx, $dd, $hh, $mm, $ss, $ms); 
} 
+0

'$ t = $ signe. $ hr "h". signe $ $ t. "m"; 'et' return $ t; ??? – shadyyx

+1

Je pense qu'il est idiot de dire «-0 h -1 m» ou «0 h -1 m». Le code peut bien sûr être modifié pour correspondre à la sortie affichée. –

+0

Merci d'avoir essayé Salman, mais malheureusement, cela ne fonctionne pas pour moi. echo convertTime (-60000); sorties -0d 00h 01m 00.0000s – Alice

Questions connexes