2012-12-27 51 views
6

可能重复:
Convert seconds to Hour:Minute:SecondPHP日期()小时,分钟和秒,没有前导零

我一直在寻找所有在互联网上找到转换秒的好方法进入分钟:没有前导零的秒。我已经检出this question,这是我唯一能找到的唯一一个,但是没有一个答案看起来很好。也许他们是实现这一目标的唯一和最好的方式,但我希望不会。

我已经做到了这一点,它给了我没有前导零的分钟数,但是我无法获得秒数。我认为这样做的唯一方法就是做几行数学等等,但是对于像这样简单的事情来说,这看起来像是一项可怕的工作......我不知道PHP为什么会这么做“T有它建在分反正秒....

intval(gmdate("i:s", $duration)); 

编辑 所有我试图做的是的秒数转换成视频,为H:M:S格式。

+0

你需要什么'intval()'作为? **为什么**添加了它? – zerkms

+0

嗯,这是在我的问题的其他溢出问题的答案之一,它消除了零,以及其他一切。 –

+0

不,它不。请在随机应用函数之前阅读文档:http://php.net/intval – zerkms

回答

2
implode(
    ':', 
    array_map(
     function($i) { return intval($i, 10); }, 
     explode(':', gmdate('H:i:s', $duration)) 
    ) 
) 

但是什么样,如果小时== 0那么不打印0:,只是有M:S

preg_replace(
    '~^0:~', 
    '', 
    implode(
     ':', 
     array_map(
      function($i) { return intval($i, 10); }, 
      explode(':', gmdate('H:i:s', $duration)) 
     ) 
    ) 
) 
+0

把所有东西放在一行:)做得很好:)。 –

+0

谢谢,这确实有预期的结果。 我没有问这个,但是如果小时== 0,那么不打印0:只是有m:s –

+0

@Dylan Cross:见版本2 – zerkms

1

gmdate将时间戳记作为第二个参数。 你应该做这样的事情:

echo gmdate("H:i:s", mktime(0, 0, 0, 1, 1, 1998) + $duration); 

INTVAL不应该存在,因为你得到一个字符串,并再次转化为int。用H:i:s你有10:40:05。
但是,如果持续时间> 24h,这将不起作用。

+0

我想删除前导零,但上面的代码不。 –

+0

如果你想要没有领先的0,那么你将不得不使用 $ hours = date(“h”,mktime(0,0,0,1,1,1998)+ $ duration); $ minutes = intval(date(“i”,mktime(0,0,0,1,1,1998)+ $ duration)); $ seconds = intval(date(“s”,mktime(0,0,0,1,1,1998)+ $ duration)); –

+0

我编辑了我的代码,我有一种感觉,你应该使用日期而不是gmdate。否则,现在可能不准确,具体取决于服务器日期。 –

2

我只想写迭代:

function duration_to_timestring($duration) 
{ 
     $s = []; 
     if ($duration > 3600) { 
       $s[] = floor($duration/3600); 
       $duration %= 3600; 
     } 
     $s[] = floor($duration/60); 
     $s[] = floor($duration % 60); 

     return join(':', $s); 
} 
+0

这也不错,尽管我仍然无法弄清楚为什么php不会'包括没有前导零的分钟和秒。 –

+1

@DylanCross只有特权者知道为什么,或许他们用尽了有用的字母作为格式说明符;-) –

相关问题