2012-02-01 94 views
9

我想要一個小數並將其轉換,以便我可以將它作爲小時,分鐘和秒來回顯。如何將小數轉換爲時間,例如。 HH:MM:SS

我有時間和分鐘,但我正在打破我的大腦試圖找到秒。一直沒有運氣的谷歌搜索。我相信這很簡單,但我沒有嘗試過。任何建議表示讚賞!

以下是我有:

function convertTime($dec) 
{ 
    $hour = floor($dec); 
    $min = round(60*($dec - $hour)); 
} 

就像我說的,我得到的小時和分鐘沒有問題。只是由於某種原因而掙扎得秒。

謝謝!

+0

以什麼格式是「十進制」? – 2012-02-01 20:20:39

+0

你有什麼似乎也不對。你能提供一個樣本輸入和期望的輸出嗎? – Sorin 2012-02-01 20:22:20

+0

小數點沒什麼特別的。像5.67891234。 – HMFlol 2012-02-01 20:23:29

回答

15

如果$dec以小時爲單位($dec因爲提問者特別提到一個進制):

function convertTime($dec) 
{ 
    // start by converting to seconds 
    $seconds = ($dec * 3600); 
    // we're given hours, so let's get those the easy way 
    $hours = floor($dec); 
    // since we've "calculated" hours, let's remove them from the seconds variable 
    $seconds -= $hours * 3600; 
    // calculate minutes left 
    $minutes = floor($seconds/60); 
    // remove those from seconds as well 
    $seconds -= $minutes * 60; 
    // return the time formatted HH:MM:SS 
    return lz($hours).":".lz($minutes).":".lz($seconds); 
} 

// lz = leading zero 
function lz($num) 
{ 
    return (strlen($num) < 2) ? "0{$num}" : $num; 
} 
+0

感謝您的幫助。這比我想要做的更有意義。 :) – HMFlol 2012-02-01 20:43:20

+0

@HMFlol:很高興幫助。 – Crontab 2012-02-01 20:44:40

+2

而不是創建'lz'函數,你可以使用原生的'str_pad'函數,從PHP:'str_pad($ num,2,0,STR_PAD_LEFT)' – elboletaire 2013-09-08 18:53:42

0

我不知道這是否是做到這一點的最好辦法,但

$variabletocutcomputation = 60 * ($dec - $hour); 
$min = round($variabletocutcomputation); 
$sec = round((60*($variabletocutcomputation - $min))); 
7

非常簡單的解決方案在一條線上:

echo gmdate('H:i:s', floor(5.67891234 * 3600)); 
+4

只要您沒有24小時或更長的時間,就可以工作。 – Crontab 2012-02-01 20:42:47

+0

@Crontab沒有想過:)謝謝。 – Cheery 2012-02-01 20:44:33

+2

如果使用'date()'而不是'gmdate()',它會影響嗎? – Staysee 2014-12-04 15:55:52

3

一切upvoted沒有工作在我的情況。 我已經使用該解決方案將十進制小時和分鐘轉換爲正常時間格式。 即

function clockalize($in){ 

    $h = intval($in); 
    $m = round((((($in - $h)/100.0) * 60.0) * 100), 0); 
    if ($m == 60) 
    { 
     $h++; 
     $m = 0; 
    } 
    $retval = sprintf("%02d:%02d", $h, $m); 
    return $retval; 
} 


clockalize("17.5"); // 17:30 
0

這是一個偉大的方式,避免使用浮點精度的問題:

function convertTime($h) { 
    return [floor($h), (floor($h * 60) % 60), floor($h * 3600) % 60]; 
} 
相關問題