我首先要說的前言這一點,我有一個「工作」的解決方案,從這個以前的螺紋部分採取:本地化「持續時間」或毫秒
How to convert time milliseconds to hours, min, sec format in JavaScript?
我的目標是花費毫秒的時間,並使用本地化/國際化技術將其轉換爲人類可讀的。輸入值以毫秒爲單位,是一個移動目標,因爲它是ETA(預計到達時間),而不是固定的到達時間。它不斷重新計算。
我想出了什麼作品。我正在尋找的東西可能會利用momentjs(因爲它已經有一個本地化系統)。特別是它不一定是momentjs,但我希望有更優雅的選項,特別是在涉及到本地化時。我也使用並因此有權訪問i18next提供的任何內容。
這裏的當前解決方案的簡化版本(它是一個對象文字的效用函數內部):
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
在這種情況下我採取類似的方法作爲原始線程,但我返回一個可用的對象而不是自動轉換爲一個字符串。在我的現實世界的代碼中,我有一些其他的條件,我會通過一些選項來返回一個本地化的值。但是在這裏我們看到,我將該對象與i18next提供的一些語言條目連接起來。這就是本地化發生的地方。
然而在我看來,持續時間對他們來說比對測量單位的交換更重要。
使用momentjs看起來有點過分,但儘管如此,我只是沒有看到任何持續時間函數。所有與日期相關的功能。
因爲我覺得我的解決方案不是非常靈活,本地化有點二流,有沒有人知道更好的方法?
不知道如何回溝通不是通過評論其他編輯......但這個片段實際上並不產生所需的輸出。意圖與現在完全缺失的本地化有關。如果除了一個拒絕服務器之外的任何「批准」編輯都讀過這個...你也失敗了。;) –
注意:在我之前的評論中提到的「這個片段」是最初由編輯提供的片段。我已經更新了它。 –