【问题标题】:Set time in Moment.js在 Moment.js 中设置时间
【发布时间】:2020-01-19 21:31:18
【问题描述】:

如何将时刻的时间设置为特定时间,比如 15:45:30。我想要完成的是从缠绕时间中减去 1 秒,直到它结束为 00:00:00

【问题讨论】:

  • 阅读 momentjs 文档,并在 google 上搜索 setInterval()。
  • 我试过了,但我找不到任何方法可以将时间设置为没有日期的特定时间。
  • 但是你需要日期!获取当前时间戳,添加您的计数器将计数的时间。将当前时间戳与该时间戳进行比较以获得剩余时间。使用 setInterval() 定期比较它。

标签: javascript momentjs


【解决方案1】:

这里有几个注意事项:

首先:Moment 本身无法处理超过 24 小时的“持续时间”。如果您的倒计时永远不会超过 23:59:59,您可以使用原生时刻。否则,您可以使用名为 moment-duration-format 的插件。

第二:使用setInterval 可能无法准确达到您指定的时间。这是一个最小值,因此如果您将其设置为每 1000 毫秒运行一次,它实际上有时可能会在 1400 毫秒后运行。数千次调用的累积错误可能很严重。

因此,有一个“基线”时期要可靠得多,然后从当前时期中减去它以获得您开始时的差异。

这导致了下面的例子,它将这些放在一起。

var el = document.getElementById('timer');
var dur = moment.duration('94:22:17'); // set the duration
var start = Date.now(); //get benchmark epoch

setInterval(function() {
  var d2 = dur.clone() // clone the duration, so we don't modify the original
    .subtract(Date.now() - start, 'ms'); // subtract the ms since the benchmark from the clone
  el.innerText = d2.format('HH[h] mm[m] ss[s]'); // display formatted version of cloned duration
}, 100);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js" integrity="sha256-4iQZ6BVL4qNKlQ27TExEhBN1HFPvAvAMbFavKKosSWQ=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/2.3.2/moment-duration-format.min.js" integrity="sha256-M2KULKSJyw+G0068JiMlM9GX4XpLdUButSzBqntKDZM=" crossorigin="anonymous"></script>

<div id='timer'></div>
注意:这是一个非常简单的例子。它不会查看计时器何时达到零,并且在达到零后将简单地变为负数。

credit:我通过this question/answer找到了这个moment插件。

【讨论】:

    猜你喜欢
    • 2016-03-08
    • 2013-11-06
    • 2020-02-11
    • 1970-01-01
    • 2021-10-22
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多