本地化“持续时间”或毫秒

本地化“持续时间”或毫秒

问题描述:

“剩余时间”

我首先要说的前言这一点,我有一个“工作”的解决方案,从这个以前的螺纹部分采取:本地化“持续时间”或毫秒

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

注意:在我之前的评论中提到的“这个片段”是最初由编辑提供的片段。我已经更新了它。 –

有显示在使用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的粒度,所以我必须感谢您指引我朝那个方向发展。 –