javascript - 使用moment JS/angularjs检查时间差是否超过30分钟

标签 javascript momentjs ag-grid

我正在使用 ag-grid,我们正在使用 moment js 进行时间操作。

场景如下:我从后端 (JSON) 获取 Unix 时间的最后更新时间戳(如 1485120726)。我的逻辑是检查上次更新的时间戳是否小于 30 分钟。如果是这样,单元格应呈红色。除非有新的修订,否则此突出显示将在 30 分钟后过期(回到原来的色 block )。

此时我陷入了如何检查当前时间戳和上次更新时间戳之间的差异的困境。

这是我的代码:

  highlightFAA =(params):any=>{
  var CurrentDate = moment().unix();  //val 1485120726-currUnixtime
  var lastRevised= (params.node.data.lastRevised/1000); //Val 1484859960--backend is giving value in millisec so converting to sec

  console.log("currdate", CurrentDate);
  console.log("lastRevised", lastRevised);
  console.log("param node", params.node.data.lastRevised);

  //30 min is 1800 sec
  if(Math.abs(lastRevised- CurrentDate)>1800){
    return  {'background-color': 'black', 'text-align': 'center', 'font-weight': 'bold'};
  } else {
    return {'background-color': '#FFEB3B', 'text-align': 'center', 'font-weight': 'bold'};
  }

}

我不确定这个逻辑是否足够

我尝试了另一种方法,使用 diff

highlightFAA = (params):any => {

  var CurrentDate = moment().format('YYYY-MM-DD HH:mm');
  var lastRevised = moment.unix(params.data.lastRevised/1000).format('YYYY-MM-DD HH:mm');

  console.log("currdate", CurrentDate);
  console.log("lastRevised", lastRevised);
  console.log("param node", params.node.data.lastRevised);

  var ms = moment(lastRevised).diff(moment(currdate));
}

但是我收到错误消息,说 diff 不能用于字符串或数字,我不知道如何继续,我需要一些建议。

**这是我编写的更新后的代码,在几分钟内就会产生差异。

 highlightFAA = (params):any=> {

     var CurrentDate = moment().tz("UTC").format('YYYY-MM-DD HH:mm');
     var lastRevised = moment.unix(params.data.lastRevised/1000).tz("UTC").format('YYYY-MM-DD HH:mm');
     var ms = moment(CurrentDate).diff(moment(lastRevised), 'minutes');

     if(ms>30) {
         return {'background-color': '#FFEB3B', 'text-align': 'center', 'font-weight': 'bold'};
     } else {
       return {'color': 'black', 'text-align': 'center', 'font-weight': 'bold'};
     }
 }

但是这里每次重新加载页面时都会检查时差,但我需要的是一种动态重新检查当前时间和上次修改时间之间的时差的方法,并在超过 30 分钟时间限制时立即更改颜色.

最佳答案

使用.subtract获取30分钟前的时间戳

let halfAnHourAgo = moment().subtract(30, 'minutes').toDate().getTime();

.toDate 会将 moment 转换为纯 js Date 对象。

.getTime 将返回日期的时间戳。

然后检查您的 unix 时间戳是否大于或小于 moment 给您的时间

if (yourServerDate < halfAnHourAgo) {
    // color cell red
}

关于javascript - 使用moment JS/angularjs检查时间差是否超过30分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41797823/

相关文章:

javascript - 通过单击同一 div 中的按钮动态选择元素

javascript - 检查日期是否大于当前日期 17 :30

javascript - ag-grid:使整行成为行拖动的抓地力

javascript - 通过将mp3文件添加到<audio>元素来获取其持续时间?

加载后Javascript设置输入值

javascript - 样式化 CLNDR.js 日历多日事件的第一天和最后一天

angular - Ag 网格服务器端分页

ag-grid - 如何在 ag-grid 上显示数据之前对其进行格式化

javascript - 请求 Javascript/Angular 遇到异步问题

javascript - MomentJS 检查是否为第二天并间隔几天