【问题标题】:Moment.js returning 2 days if duration is 24 hours如果持续时间为 24 小时,Moment.js 返回 2 天
【发布时间】:2018-12-12 08:01:34
【问题描述】:

我需要有一个功能,用户可以在其中插入特定时间范围(例如 1 周或 5 天 12 小时)。 Moment.js 的持续时间看起来最有希望。

下面的代码返回2 00:00,其中2 等于天数。这应该是 1,因为那里只有 24 小时。

moment.utc(moment.duration(24, 'hours').as("milliseconds")).format("D HH:mm");

我在这里做错了什么?

【问题讨论】:

标签: javascript angularjs date momentjs


【解决方案1】:

您通过调用 moment.utc(...) 将 24 小时设置为从 1970-01-01(Unix 纪元)开始的毫秒偏移量。这意味着您的时刻持有日期1970-01-02 00:00,然后您将打印日期部分。

【讨论】:

    【解决方案2】:

    如果时间框架是固定的并由您自己设置,您始终可以手动输入以毫秒为单位的时间量。例如24 小时是 86400000 毫秒。

    【讨论】:

    • 并非所有天都是 24 小时,这就是为什么您应该将天添加为天,而不是毫秒。
    • 你是想告诉我一天 24 小时并不总是 24 小时吗?
    • 是的。在实行夏令时的情况下,过渡日期的天数可能为 23、23:30、24:30 或 25 小时(可能还有其他时间)。
    【解决方案3】:

    您必须在瞬间而不是瞬间格式化毫秒。我认为下面的行给出了您的预期值。

     moment.duration(moment.duration(24, 'hours').as("milliseconds")).format("D HH:mm");
    

    答案:1 00:00

    【讨论】:

    【解决方案4】:

    我用以下代码和插件修复了它:

    moment.duration(moment().diff(moment().subtract(1, 'days')));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2013-06-24
      • 2012-10-09
      相关资源
      最近更新 更多