2012-12-27 126 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只有特權者知道爲什麼,或許他們用盡了有用的字母作爲格式說明符;-) –

相關問題