【问题标题】:Localize "duration" or "time remaining" from milliseconds从毫秒本地化“持续时间”或“剩余时间”
【发布时间】:2015-11-02 22:46:41
【问题描述】:

让我先说我有一个“有效”的解决方案,部分来自上一个帖子:

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

在这种情况下,我采用与原始线程类似的方法,但我返回一个可用对象而不是自动转换为字符串。在我的实际代码中,我有一些其他条件要通过,还有一些选项将返回一个未本地化的值。但是在这里我们看到我将对象与 提供的一些语言条目连接起来。这就是本地化发生的地方。

但在我看来,持续时间对他们来说比交换计量单位更重要。

使用 似乎有点矫枉过正,但尽管如此,我还是看不到任何持续时间函数。所有与日期相关的函数。

由于我觉得我的解决方案不是很灵活,而且本地化有点二流,有人知道更好的方法吗?

【问题讨论】:

  • 不知道如何通过 cmets 以外的方式与编辑器进行交流......但是这个 sn-p 实际上并没有产生所需的输出。意图与现在完全缺失的本地化有关。如果除了一个拒绝者之外的任何“批准”编辑曾经读过这篇文章......你的工作也失败了。 ;)
  • 注意:我之前的评论中提到的“这个sn-p”是一个编辑器最初提供的。我已经更新了它。

标签: momentjs momentjs i18next i18next momentjs javascript momentjs i18next


【解决方案1】:

可以使用 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

【讨论】:

  • 谢谢马雷克!是的,这正是我想要的。我确实阅读了那一刻的文档,但不知何故未能偶然发现持续时间或人性化...... :-/ 更重要的是,我相信我需要 HumanizeDuration.js 的粒度,所以我必须感谢你为我指明了那个方向。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多