以hh:mm:ss格式输出秒数相对于秒数

时间:2017-09-09 10:21:14

标签: php

我创建了一个将任意秒数转换为hh:mm:ss格式的函数。它目前工作正常,但是,我希望它比现在更加精致

这就是我目前所拥有的:

// 65 seconds
$t = round(65); 

// this will output 00:01:05
echo sprintf("%02d:%02d:%02d", ($t/3600),($t/60%60), $t%60);

我希望它输出的内容与此类似:

// 11 -> 0:11
// 60 -> 1:00
// 1200 -> 20:00
// 3600 -> 1:00:00
// 36000 -> 10:00:00

我一直在寻找,但是,我没有遇到任何能够满足我需要的东西(甚至是类似的东西,所以我可以改变它)。

感谢所有帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

我将对您的代码进行一些修改。 我相信你的代码实际上非常快,因为你使用本机函数。

这是

function format_time($t) {
     $t = round($t); 
     return ($t < 3600 ? sprintf("%d:%02d", ($t/60%60), ($t%60)) : 
          sprintf("%d:%02d:%02d", ($t/3600),($t/60%60), ($t%60)));
}

输出与您在问题中指定的完全相同。 欢呼声。

答案 1 :(得分:0)

这是我所拥有的。让我知道是否还有更好的事情:

<?php

$d = new DateTime();
$t = 122;
$d2 = new DateTime();
$d2->add(DateInterval::createFromDateString("$t seconds"));


$diff = $d->diff($d2);

$formatted = "";
if ($diff->h) {
    $formatted .= $diff->format("%H").":";
}
if ($diff->i || $diff->h) {
    $formatted .= $diff->format("%I").":";
}

$formatted .= $diff->format("%S");

echo $formatted;

打印:

  

02:02

示例:

http://sandbox.onlinephpfunctions.com/code/ea13ec5a2c37e48bcf5c2228be15f490e6ba0595

注意:这假设持续时间少于1天,但您可以将上面的内容扩展一点

答案 2 :(得分:0)

这也有效。 Date创建格式并使用两个preg_replace来删除小时和/或分钟。

通过将时区设置为UTC,日期将输出正确的时间。

修改;我现在设法用一个正则表达式

$t = 11;
date_default_timezone_set('UTC');
Echo preg_replace("/^00:0|^00:|^0/", "", date("H:i:s" , $t));

https://3v4l.org/ErkXg