2015-11-02 104 views
2
「剩餘時間」

我首先要說的前言這一點,我有一個「工作」的解決方案,從這個以前的螺紋部分採取:本地化「持續時間」或毫秒

How to convert time milliseconds to hours, min, sec format in JavaScript?

我的目標是花費毫秒的時間,並使用本地化/國際化技術將其轉換爲人類可讀的。輸入值以毫秒爲單位,是一個移動目標,因爲它是ETA(預計到達時間),而不是固定的到達時間。它不斷重新計算。

我想出了什麼作品。我正在尋找的東西可能會利用(因爲它已經有一個本地化系統)。特別是它不一定是,但我希望有更優雅的選項,特別是在涉及到本地化時。我也使用並因此有權訪問提供的任何內容。

這裏的當前解決方案的簡化版本(它是一個對象文字的效用函數內部):

function duration (millis) { 
 
    // in actual code, a function "i18n.t(key)" would return a properly 
 
    // localized string. Instead, I'll just store English strings in an object 
 
    var mockTranslation = { 
 
    hoursLabel: "hr", 
 
    minutesLabel: "min", 
 
    secondsLabel: "s" 
 
    } 
 

 
    millis = parseInt(millis); 
 

 
    function msToTime(duration) { 
 
    var milliseconds = parseInt((duration%1000)/100) 
 
     , seconds = parseInt((duration/1000)%60) 
 
     , minutes = parseInt((duration/(1000*60))%60) 
 
     , hours = parseInt((duration/(1000*60*60))%24); 
 

 
    hours = (hours < 10) ? "0" + hours : hours; 
 
    minutes = (minutes < 10) ? "0" + minutes : minutes; 
 
    seconds = (seconds < 10) ? "0" + seconds : seconds; 
 

 
    return { 
 
     hours : hours, 
 
     minutes: minutes, 
 
     seconds: seconds, 
 
     milliseconds: milliseconds 
 
    } 
 
    } 
 
    var converted = msToTime(millis); 
 
    var final = "" + converted.hours + " " + mockTranslation.hoursLabel 
 
      + " " + converted.minutes + " " + mockTranslation.minutesLabel 
 
      + " " + converted.seconds + " " + mockTranslation.secondsLabel; 
 
    return final; 
 
} 
 

 
// test with a sample input of 416000 ms. 
 
console.log(duration(416000)); // 00 hr 06 min 56 s

在這種情況下我採取類似的方法作爲原始線程,但我返回一個可用的對象而不是自動轉換爲一個字符串。在我的現實世界的代碼中,我有一些其他的條件,我會通過一些選項來返回一個本地化的值。但是在這裏我們看到,我將該對象與提供的一些語言條目連接起來。這就是本地化發生的地方。

然而在我看來,持續時間對他們來說比對測量單位的交換更重要。

使用看起來有點過分,但儘管如此,我只是沒有看到任何持續時間函數。所有與日期相關的功能。

因爲我覺得我的解決方案不是非常靈活,本地化有點二流,有沒有人知道更好的方法?

+0

不知道如何回溝通不是通過評論其他編輯......但這個片段實際上並不產生所需的輸出。意圖與現在完全缺失的本地化有關。如果除了一個拒絕服務器之外的任何「批准」編輯都讀過這個...你也失敗了。;) –

+0

注意:在我之前的評論中提到的「這個片段」是最初由編輯提供的片段。我已經更新了它。 –

回答

4

有顯示在使用moment.js以人可讀方式毫秒持續時間的可能性:

moment.duration(416000).humanize(); 

上面的代碼返回:7 minutes。這是你需要的嗎?

當然,您可以使用來自moment.js的i18n。您只需致電:

moment.locale('es'); 
moment.duration(416000).humanize(); 

以獲得西班牙語本地化期限(7 minutos)。

如果您需要更詳細的結果(6 minutes 56 seconds)看看這個庫:https://github.com/EvanHahn/HumanizeDuration.js

+0

謝謝Marek!是的,這正是我正在尋找的。我確實讀過了當下的文檔,但不知怎麼的都沒有偶然發現持續時間或人性化......: - /更重要的是,我相信我需要HumanizeDuration.js的粒度,所以我必須感謝您指引我朝那個方向發展。 –