我创建了一个将任意秒数转换为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
我一直在寻找,但是,我没有遇到任何能够满足我需要的东西(甚至是类似的东西,所以我可以改变它)。
感谢所有帮助,谢谢。
答案 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));