本地化”;持续时间”;或“;剩余时间”;从毫秒开始
Localize "duration" or "time remaining" from milliseconds
让我在前面说,我有一个"有效"的解决方案,部分来自上一个线程:
如何在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似乎有些过头了,但尽管如此,我还是看不到任何持续时间函数。所有与日期相关的功能。
既然我觉得我的解决方案不是很灵活,本地化有点二流,有人知道更好的方法吗?
使用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
- 从工作日结束到下一个工作日开始的完整日历JS包装时间
- 如何使用MomentJS实现从特定时间开始的计数
- 如何用javascript计算从现在开始的时间
- 如何从某个时间开始预加载HTML5视频
- 如何在dhtmlxgantt中显示灯箱中的开始日期、结束日期和持续时间
- 画布在一段时间后开始滞后
- angularjs计算开始时间和当前时间之间的时间差
- 使用HTML5 Navigation Timing API时,导航开始时间设置为0
- 基础日期选择器、结束日期(和时间)不能早于开始日期(和时间)
- 高图表日期时间从错误的日期开始
- 结束日期作为基础日期时间选择器中的选定开始日期
- 如何设置开始时间
- 如何从上次运行javascript函数的时间开始
- jquery 添加“随机”内容以从当前时间开始每秒值
- 如何在spotify中从特定时间开始播放歌曲
- 每天在同一时间开始
- 如何从一个特殊的时间开始一个视频并链接它
- 如何使yAxis从一个特定的时间开始,条形图中的序列
- 使用javascript验证日期、时间开始和时间结束
- 从开始日期和时间开始倒计时