2016-05-17 147 views
1

我有一個像00:30:30那樣的date_diff()時間。我想轉換爲只有0.30小時的小時。 我用波紋管代碼,如何將十進制數中的小時數(小時:分鐘:秒)轉換爲小時數

<code> 
    $start=date_create($tempStart_emp); 
    $end=date_create($current_date); 
    $diff=date_diff($start,$end); 
    echo $diff->format("%H:%I:%S");//00:30:30 
</code> 

我預計outpur://0.30Hour 是否有可能?

+0

沒有,時間格式沒有爲你做,你需要手動做到這一點。 –

+1

'echo $ diff-> format(「%H.%i」);'也許? –

+3

您確定要在十進制中將'00:30'設置爲'0.30'而不是'0.50'嗎? – C2486

回答

3

我假設,你想要的輸出是0.5 - 半個小時。如果你想要0.30,你可以用你的格式字符串替換:,點號爲.

您可以通過減去的開始和結束時間的時間標記在數秒的時間間隔:

$diff_s = $end->getTimestamp() - $start->getTimestamp(); 

然後就是3600分獲得小數時間:

$diff_h = $diff_s/3600; 
echo round($diff_h, 2); 

見工作示例ideone.com

總結討論中的意見:當然

時間區和夏令時的變化始終是一個問題,當你用日期和時間工作。如果(!)在構建DateTime對象時考慮了正確的時區,則此答案中的時間戳差異將顯示您在其間傳入的秒數真的需要(*)。這可能與時間有所不同,看起來已經通過了你的掛鐘。

(*)時間真的通過了嗎?不,不幸的是沒有。當涉及到閏秒時,兩個Unix時間戳的差異不一定是通過的秒數。至少,這種錯誤的性質相對較小。在這裏看到更多的信息:Unix time and leap seconds

+0

$ diff是一個對象....它不會轉換int .... 不起作用 –

+0

小錯字 - 當然我們必須將'$ diff_s'除以3600,這只是一個int - getTimestamp返回將給定DateTime對象的unix時間戳記作爲int。我添加了一個示例鏈接。 – DerVO

+0

請注意,如果時間間隔跨越夏令時轉換,這將失敗@MarkBaker我不同意 –

相關問題