PHP将秒转换为MM:DD:HH:MM:SS


PHP Convert seconds into MM:DD:HH:MM:SS

我想帮助将秒转换为MM:DD:HH:MM:SS格式。

我这里有这个代码:

<?php
    // Convert seconds into months, days, hours, minutes, and seconds.
    function secondsToTime($ss) {
    $s = $ss%60;
    $m = floor(($ss%3600)/60);
    $h = floor(($ss%86400)/3600);
    $d = floor(($ss%2592000)/86400);
    $M = floor($ss/2592000);
    return "$M months, $d days, $h hours, $m minutes, $s seconds";
    }
?>

它输出的示例

0个月1天3小时46分39秒

我只是希望它像

00:01:03:46:39

我该怎么做?

据我所知,您似乎对返回一个字符串感兴趣,该字符串的值包含两个用冒号分隔的数字。假设定位不需要改变,你可以做类似于以下的事情:

<?php
// Prefix single-digit values with a zero.
function ensure2Digit($number) {
    if($number < 10) {
        $number = '0' . $number;
    }
    return $number;
}
// Convert seconds into months, days, hours, minutes, and seconds.
function secondsToTime($ss) {
    $s = ensure2Digit($ss%60);
    $m = ensure2Digit(floor(($ss%3600)/60));
    $h = ensure2Digit(floor(($ss%86400)/3600));
    $d = ensure2Digit(floor(($ss%2592000)/86400));
    $M = ensure2Digit(floor($ss/2592000));
    return "$M:$d:$h:$m:$s";
}

或者,如果你不喜欢再管理一个功能,也许这更适合你:

<?php
// Convert seconds into months, days, hours, minutes, and seconds.
function secondsToTime($ss) {
    $s = $ss%60;
    $m = floor(($ss%3600)/60);
    $h = floor(($ss%86400)/3600);
    $d = floor(($ss%2592000)/86400);
    $M = floor($ss/2592000);
    // Ensure all values are 2 digits, prepending zero if necessary.
    $s = $s < 10 ? '0' . $s : $s;
    $m = $m < 10 ? '0' . $m : $m;
    $h = $h < 10 ? '0' . $h : $h;
    $d = $d < 10 ? '0' . $d : $d;
    $M = $M < 10 ? '0' . $M : $M;
    return "$M:$d:$h:$m:$s";
}

然后调用我们的函数(无论您决定使用哪种方法):

<?php
$ss = 123456;
print secondsToTime($ss);
?>

简单的方法:

print date('m:d:h:i:s', $ss); // $ss = seconds

然而,据我所知,这无法按照你想要的方式处理年份,因为它将从1970年开始计数。但显然你不需要展示年份。

或者,您可以使用(s)printf:格式化当前字符串

printf('%02d:%02d:%02d:%02d:%02d', $M, $d, $h, $m, $s);

给定所有变量,您可以简单地使用PHP:构建字符串

$str = "$M:$d:$h:$m:$s"

然而,此代码无法处理前导零。