【问题标题】:Convert days to get hours, minutes and seconds of two dates using momentjs使用 momentjs 转换天数以获取两个日期的小时、分钟和秒
【发布时间】:2019-11-29 07:05:16
【问题描述】:

如何使用 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;

【问题讨论】:

    标签: javascript reactjs momentjs


    【解决方案1】:

    首先,在制作倒数计时器时,切勿从最终日期中减去,而是在每次迭代时计算差异。 然后,为了计算每个持续时间,您需要将持续时间的整数部分作为值,然后用小数部分计算下一个间隔乘以 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>

    【讨论】:

    • 你比较过这里的currentTime吗?还是有所作为?
    • moment() 为您提供当前时间,因此 eventTime - moment() 为您提供差异
    【解决方案2】:

    使用moment-duration-format

    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>

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2012-09-27
      相关资源
      最近更新 更多