0

如何使用momentjs转换天数以获取小时、分钟和秒?我认为我的计算是错误的,因为我得到了今天的日期和我从有 5 天的 API 获得的日期的差异。

到目前为止,这是我的代码

const countdown = () => {
  let dueDate = '2019-12-04 12:50:42 AM'; //getting this value from the API

  let eventTime = moment(dateDue).unix();
  let currentTime = moment(new Date()).unix();
  let diffTime = eventTime - currentTime;

   const interval = 1000;
   let duration = moment.duration(diffTime * interval, 'milliseconds');
   duration = moment.duration(duration - interval, 'milliseconds');

   countDowntimer[dateDue] = setInterval(() => {
     setMinutes(duration.minutes());
     setSeconds(duration.seconds());
   }, interval);

   return `${duration.hours()}hr ${duration.minutes()}m ${duration.seconds()}s`;

 };

 const timer = countdown(minutes, seconds);

 return timer;
4

2 回答 2

0

首先,在制作倒数计时器时切勿从最终日期中减去,而是在每次迭代时计算差异。然后,为了计算每个持续时间,您需要将持续时间的整数部分作为值,然后用小数部分计算下一个间隔乘以 X(其中 x 是秒为一分钟,分钟为一小时,依此类推)。

const time = document.getElementById("time");

const countdown = () => {
  let dueDate = '2019-12-04 12:50:42 AM'; //getting this value from the API

  let eventTime = moment(dueDate, 'YYYY-MM-DD HH:mm:ss a');
  const interval = 1000;
  setInterval(() => {
    const hours = moment.duration(eventTime - moment()).asHours();
    const hInt = Math.floor(hours);
    const minutes = moment.duration(60 * (hours - hInt), 'minutes').asMinutes();
    const mInt = Math.floor(minutes);
    const seconds = moment.duration(60 * (minutes - mInt), 'seconds').asSeconds();
    const sInt = Math.floor(seconds);
    time.innerHTML = `${hInt}hr ${mInt}m ${sInt}s`;
    // set react state here
  }, interval);
};

countdown();
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<span id="time"></span>

于 2019-11-29T08:33:54.767 回答
0

使用时刻持续时间格式

const countdown = () => {
  let dueDate = '2019-12-04 12:50:42 AM';
  let end = moment(dueDate, 'YYYY-MM-DD hh:mm:ss A');
  let start = moment();

  const interval = 1000;
  setInterval(() => {
    start = moment()
    let diff = end.diff(start)
    document.body.innerHTML = moment.duration(diff).format("HH[hr] mm[m] ss[s]");
  }, interval);

}
countdown()
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js" integrity="sha256-H9jAz//QLkDOy/nzE9G4aYijQtkLt9FvGmdUTwBk6gs=" 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>

于 2019-11-29T10:48:31.187 回答