2017-10-14 47 views
0

我有這個JavaScript代碼工作正常:MySQL的轉換從幾秒鐘到另一個自定義格式

function timeup(s) { 
    var d, h, m, s; 
    m = Math.floor(s/60); 
    s = s % 60; 
    h = Math.floor(m/60); 
    m = m % 60; 
    d = Math.floor(h/24); 
    h = h % 24; 
    m = m > 9 ? m : "0"+m; 
    h = h > 9 ? h : "0"+h; 
    s = s > 9 ? s : "0"+s; 

    if (d > 0) { 
     d = d+" days "; 
    } else { 
     d = ""; 
    } 
    return d+h+":"+m+":"+s; 
} 

,所以我需要同樣的功能,但在MySQL(因爲我做的SQL查詢和不想使用JavaScript轉換在客戶端)

,所以我需要在MySQL秒轉換得到這個相同的輸出:

timeup(600000) => 6 days 22:40:00 
timeup(60000) => 16:40:00 
timeup(6000) => 01:40:00 
timeup(600) => 00:10:00 
timeup(60)  => 00:01:00 
timeup(60)  => 00:01:00 
timeup(6)  => 00:00:06 

所以,如果低於天秀HH秒:MM:SS如果秒大於天秀X天HH :MM:SS

我試圖使用CONCAT & TIMESTAMPDIFF,但我想也許它應該去如果然後比較一天24小時以下或磨碎顯示自定義字符串X天......任何幫助歡迎。

+0

秒,因爲_when_?或者你只需​​要將任意秒數轉換爲天,小時等?也許你可以解釋爲什麼你需要在MySQL中這樣做?在我的數據庫旅行中,我從未遇到過這種需求。 –

+0

我需要將秒轉換爲天數小時分鐘和秒......如果是秒0天,則不會僅顯示0天HH:MM:SS。我需要這個以漂亮的格式顯示我的所有服務器的良好運行時間,因爲我從其他服務器獲得了一些API,並且希望在數據表中顯示像這樣的好看的格式 – John

+0

我不會這樣做。如果你不想做這個客戶端(爲什麼不),那麼用PHP做。 – Strawberry

回答

1

我測試了這一點,它似乎做的工作:

DROP FUNCTION IF EXISTS GET_HOUR_MINUTES; 
DELIMITER $$ 
CREATE FUNCTION GET_HOUR_MINUTES(seconds INT) 
    RETURNS VARCHAR(16) 
BEGIN 
    RETURN CONCAT(LPAD(FLOOR(HOUR(SEC_TO_TIME(seconds))/24), 2, 0), ' days ',TIME_FORMAT(SEC_TO_TIME(seconds % (24 * 3600)), '%H:%i:%s')); 
END; 
$$ 
DELIMITER ; 

測試這樣的:

SELECT GET_HOUR_MINUTES(600001); 

返回

'06 days 22:40:01' 

它似乎想,至少在MySQL Workbench中,在運行之前選擇要使用的數據庫。它將函數保存在數據庫中,也就是說,您可以在左側的列中使用表,視圖,存儲過程和函數來查看它。

0

我現在有這一點,僅適用於seconds..but我忘了問我在數據庫中存儲的號碼的第一個問題上述功能的另一個問題:

uptime => 1507977507423 

,我需要得到秒,顯示以上格式從NOW()時間

因此,例如,如果我有數據庫運行時間,所以公式將是:NOW() - 正常運行時間,我嘗試使用這個,但我得到奇怪的輸出像34天838:59:59那是不正確:

SELECT 
CONCAT(LPAD(FLOOR(HOUR(SEC_TO_TIME(UNIX_TIMESTAMP(NOW())-SUBSTRING(uptime, 1, length(uptime) - 2)))/24), 2, 0), ' days ',TIME_FORMAT(SEC_TO_TIME(UNIX_TIMESTAMP(NOW())-SUBSTRING(uptime, 1, length(uptime) - 2) % (24 * 3600)), '%H:%i:%s')) AS nice_date 
FROM streams 
WHERE id=1; 

我得到這個:

+-------------------+ 
| nice_date   | 
+-------------------+ 
| 34 days 838:59:59 | 
+-------------------+ 
+0

你工作過嗎?你有'1507977507423'這個數字似乎包含了太多的數字,但是這個工作:'SELECT GET_HOUR_MINUTES(UNIX_TIMESTAMP(NOW()) - 1508167388);'我認爲你的數量是毫秒。丟失最後3位數字並將其舍入爲一個整數。 – cardamom

+0

發生了什麼事?我的功能到底是錯誤的..你不接受它.. – cardamom

相關問題