JS两个日期比较函数,返回刚刚、几秒前、几分钟前...

290 阅读1分钟
  • 根据后端返回的时间与当前时间进行对比,计算出时间戳的差
  • 返回刚刚、几秒前、几分钟前、几小时前、几天前、几个月前等等

后端接口返回时间格式: 年月日(time1:20220822)时分秒(time2:155602) (如果不是可忽略)

代码如下

getTimeStr(time1, time2) {
      time1 = time1.replace(/(\d{4})(\d{2})(\d{2})/g, "$1/$2/$3"); // 20220822
      // 使用$1/$2/$3是为了支持移动端ios显示
      time2 = time2.replace(/(\d{2})(\d{2})(\d{2})/g, "$1:$2:$3"); // 155602
      const nowTime = new Date().getTime(); // 获取当前时间戳
      const dateDiff = nowTime - new Date(time1 + " " + time2).getTime(); // 时间差的毫秒数
      const second = 1000; // 1秒=1000毫秒
      const minute = second * 60; // 1分=60秒;
      const hour = minute * 60; // 1小时=60分;
      const day = hour * 24; // 1天=24小时;
      const month1 = day * 30; // 按1月==30天,存在一两天误差, 纯展示暂不做细处理;

      const monthC = Math.floor(dateDiff / month1);
      const dayC = Math.floor(dateDiff / day);
      const hourC = Math.floor(dateDiff / hour);
      const minC = Math.floor(dateDiff / minute);
      const secC = Math.floor(dateDiff / second);

      let timesString = "";
      // 10秒内,刚刚;60秒内,X秒前;1小时内,X分钟前;24小时内,X小时前;
      // 30天内,X天前;12月内,X个月前
      if (monthC >= 1) {
        timesString = parseInt(monthC) + "个月前";
      } else if (dayC >= 1) {
        timesString = parseInt(dayC) + "天前";
      } else if (hourC >= 1) {
        timesString = parseInt(hourC) + "小时前";
      } else if (minC >= 1) {
        timesString = parseInt(minC) + "分钟前";
      } else if (secC >= 10) {
        timesString = parseInt(secC) + "秒前";
      } else {
        timesString = "刚刚";
      }
      return timesString;
    },