我的任務是爲我們的服務器的一種遊戲模式製作統計「查看器」。它一直很好,但我唯一的問題是將時間轉換爲小時:分鐘:秒。PHP/MySQL毫秒到小時:分鐘:秒
製作實際遊戲模式的開發人員以毫秒爲單位存儲在MySQL中播放的時間。令人遺憾的是,許多玩家有足夠的時間容易導致整數溢出(以PHP計算)。
現在,我想知道什麼是最簡單和最有效的方法來解決這個問題。有沒有一種方法可以在我不知道的MySQL查詢中執行此操作?
我的任務是爲我們的服務器的一種遊戲模式製作統計「查看器」。它一直很好,但我唯一的問題是將時間轉換爲小時:分鐘:秒。PHP/MySQL毫秒到小時:分鐘:秒
製作實際遊戲模式的開發人員以毫秒爲單位存儲在MySQL中播放的時間。令人遺憾的是,許多玩家有足夠的時間容易導致整數溢出(以PHP計算)。
現在,我想知道什麼是最簡單和最有效的方法來解決這個問題。有沒有一種方法可以在我不知道的MySQL查詢中執行此操作?
比方說,你有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個不同的整數字段中。
謝謝,這工作:) – mattrick
什麼是列類型?整數?
將整數更改爲無符號整數將使最大值加倍。
最簡單的了:
變化表結構爲該列從INT
到BIGINT
。
如果已經是BIGINT,則將現有記錄除以1000並使用秒。
例如:
或將現有記錄除以60000並使用分鐘。
$ sql =「UPDATE users
SET time
= time
/60000」;
列類型是BIGINT。但它不相關,我只需要將其轉換爲用戶友好的形式。 – mattrick
你可以使用DECIMAL(254,0),用戶永遠不會活到那麼多毫秒。 – Misunderstood
如果你想使用mySQL DATE_FORMAT和SEC_TO_TIME函數將解決這個問題 –
所以我假設我將不得不除以1000毫秒以便使用SEC_TO_TIME? – mattrick
對我來說似乎是一個很好的假設 –