代码之家  ›  专栏  ›  技术社区  ›  GROVER. sms

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

php
  •  1
  • GROVER. sms  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  1
  •   Ayo Makanjuola    7 年前

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

    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)));
    }
    

    输出完全符合您在问题中指定的内容。

        2
  •  0
  •   apokryfos    7 年前

    这是我得到的。如果有更好的,请告诉我:

    <?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天,但是您可以稍微延长上述时间

        3
  •  0
  •   Andreas    7 年前

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

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

    编辑我现在已经用一个正则表达式做到了

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

    https://3v4l.org/ErkXg