使用setInterval方法时,MomentJS无法正常工作

时间:2018-05-15 03:38:39

标签: javascript momentjs

我正在使用moment.js将时间戳转换为“8分钟前”的可读形式!

我使用setInterval每1秒更新一次代码以动态更新时间,但它根本不起作用。救救我!

代码:

let timer = () => {
  let time = document.getElementsByClassName('timeago');

  for(let i = 0; i < time.length; i++) {
    time[i].innerText = moment(time[i].innerText, "YYYY-MM-DD h:mm:ss").tz("Asia/Kathmandu").fromNow();
  }
};
setInterval(timer, 1000);
<span class="timeago">2018-05-15 09:21:00</span>

<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>

1 个答案:

答案 0 :(得分:1)

每次函数运行时,您都会将元素的文本解析为字符串(并告诉moment根据“YYYY-MM-DD h:mm:ss”解释它)。相反,只保存一次,并在一个间隔内计算它与现在之间的差异。

您还需要让Moment正确格式化。您的元素有09:21:00但是Moment格式字符串是h:mm:ss - 在两位数小时的情况下无效。

const timeagoSpan = document.querySelector('.timeago');
const from = moment(timeagoSpan.textContent, "YYYY-MM-DD hh:mm:ss");
let timer = () => {
  timeagoSpan.textContent = from.fromNow();
};
timer();
setInterval(timer, 1000);
<span class="timeago">2018-05-14 22:21:00</span>

<script src="https://momentjs.com/downloads/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>