javascript - MomentJS 倒计时与 diff

标签 javascript date datetime momentjs setinterval

我正在使用 MomentJS 库构建 session 超时作为 Web 应用程序的一部分。到目前为止(如下),我所掌握的是用户登录时和 session 到期时的 timeToExpire 差异(以秒为单位)。然而,当使用setInterval显示倒计时时钟时,diff不会每秒重新计算,并且时钟永远不会更新。

有人能指出我出现问题的正确方向吗?

const access_ttl = 3600;

const now = moment();

const login_timestamp = moment('2017-02-19 17:31:58+00:00');
const expire_timestamp = login_timestamp.add(access_ttl, 's');

const timeToExpire = expire_timestamp.diff(now, 'seconds');

function displayClock(inputSeconds) {
  const sec_num = parseInt(inputSeconds.toString(), 10);
  const hours = Math.floor(sec_num / 3600);
  const minutes = Math.floor((sec_num - (hours * 3600)) / 60);
  const seconds = sec_num - (hours * 3600) - (minutes * 60);
  let hoursString = '';
  let minutesString = '';
  let secondsString = '';
  hoursString = (hours < 10) ? "0" + hours : hours.toString();
  minutesString = (minutes < 10) ? "0" + minutes : minutes.toString();
  secondsString = (seconds < 10) ? "0" + seconds : seconds.toString();
  return hoursString + ':' + minutesString + ':' + secondsString;
}

function timer() {
  $('.output').html(`Expires in: ${displayClock(timeToExpire)}`)
}

setInterval(timer, 1000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

<div class="output"></div>

最佳答案

您没有更新 now() 或 timeToExpire 值,因此您传递给 displayClock 的值始终相同。

完整 JS Fiddle 的链接:https://jsfiddle.net/xzyjdb1g/2/

var now, timeToExpire;

function updateTime() {

  now = moment();

  timeToExpire = expire_timestamp.diff(now, 'seconds');
}

function timer() {
    updateTime();
  $('.output').html(`Expires in: ${displayClock(timeToExpire)}`)
}

关于javascript - MomentJS 倒计时与 diff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42330791/

相关文章:

javascript - 如何定义CSS :hover state in a jQuery selector?

javascript - 在 jQuery 中,如何根据从下拉列表中选择的月份来增加年份

php - MySql找到最接近的日期以及之前和之后的日期

mysql - Oracle到Mysql时间戳数据未导入

javascript - 在图像客户端上查找坐标

javascript - 服务器不理解所请求的操作。 (AWS)

javascript - 禁用对 div 类的点击,但需要启用对同一嵌套类的点击

java - 特定时间间隔内的时间

mysql - 在mysql中将秒转换为日期时间

java - 在java中将时间加在一起