2015-04-08 214 views
1

我的任務是爲我們的服務器的一種遊戲模式製作統計「查看器」。它一直很好,但我唯一的問題是將時間轉換爲小時:分鐘:秒。PHP/MySQL毫秒到小時:分鐘:秒

製作實際遊戲模式的開發人員以毫秒爲單位存儲在MySQL中播放的時間。令人遺憾的是,許多玩家有足夠的時間容易導致整數溢出(以PHP計算)。

現在,我想知道什麼是最簡單和最有效的方法來解決這個問題。有沒有一種方法可以在我不知道的MySQL查詢中執行此操作?

+0

如果你想使用mySQL DATE_FORMAT和SEC_TO_TIME函數將解決這個問題 –

+0

所以我假設我將不得不除以1000毫秒以便使用SEC_TO_TIME? – mattrick

+0

對我來說似乎是一個很好的假設 –

回答

1

比方說,你有36001316000毫秒:

SET @miliseconds = 36001316000; 
SET @s = @miliseconds/1000; 
SET @hours = FLOOR(@s/3600); 
SET @minutes = FLOOR(@s/60 - @hours * 60); 
SET @seconds = ROUND(@s - @hours * 3600 - @minutes * 60); 

SELECT @hours, @minutes, @seconds; 

這將返回萬小時21分&56秒。

您將如何存儲這些信息取決於您將如何使用它。如果僅僅是爲了信息目的,或者基於PHP的計算,你可以將它存儲在varchar中,如果你需要在MySQL中進行計算,你可以將它存儲在3個不同的整數字段中。

+0

謝謝,這工作:) – mattrick

0

什麼是列類型?整數?

將整數更改爲無符號整數將使最大值加倍。

最簡單的了:

變化表結構爲該列從INTBIGINT

如果已經是BIGINT,則將現有記錄除以1000並使用秒。
例如:
或將現有記錄除以60000並使用分鐘。

$ sql =「UPDATE users SET time = time/60000」;

+0

列類型是BIGINT。但它不相關,我只需要將其轉換爲用戶友好的形式。 – mattrick

+0

你可以使用DECIMAL(254,0),用戶永遠不會活到那麼多毫秒。 – Misunderstood

相關問題