js显示几秒前、几分钟前、昨天、时间、星期、日期

434 阅读1分钟

在消息列表中我们经常会要求展示过去时间,通常是显示秒、分、时间、日期等

于是自己动手写了个方法实现功能,需要的可以直接复制了

function rexTime(timestamp) {
  if(!timestamp) return timestamp;
  let stamp = new Date(timestamp);
  let diffTime = Math.floor((Date.now() - stamp.getTime()) / 1000); //相差时间
  if (diffTime < 3600) {
    if (diffTime < 60) {
      return diffTime + '秒前';
    }
    return Math.floor(diffTime / 60) + '分钟前';
  } else {
    const nowFirst = new Date().setHours(0, 0, 0, 0); //当天零点的时间戳
    const beforeWeek = new Date().setDate(new Date().getDate() - 7);//一周前的时间
    const yesterday = new Date(nowFirst - 86400000).getTime(); //昨天
    const stampNums = stamp.getTime(); //给定时间 戳
    const stampHours = stamp.getHours() < 10 ? '0' + stamp.getHours() : stamp.getHours(); //给定时间 时
    const stampMinutes = stamp.getMinutes() < 10 ? '0' + stamp.getMinutes() : stamp.getMinutes(); //给定时间 分
    if (stampNums > nowFirst) {
      return `${stampHours}:${stampMinutes}`;
    } else if (stampNums < nowFirst && yesterday <= stampNums) {
      return `昨天${stampHours}:${stampMinutes}`;
    } else if (beforeWeek < stampNums) {
      const weekData = ['日', '一', '二', '三', '四', '五', '六'];
      const stampWeeks = stamp.getDay(); //给定时间 星期
      return `星期${weekData[stampWeeks]} ${stampHours}:${stampMinutes}`;
    } else {
      const stampYears = stamp.getFullYear(); //给定时间 年
      const stampMonths = stamp.getMonth() + 1 < 10 ? '0' + stamp.getMonth() + 1 : stamp.getMonth() + 1; //给定时间 月
      const stampDates = stamp.getDate() < 10 ? '0' + stamp.getDate() : stamp.getDate(); //给定时间 日
      const nowYears = new Date().getFullYear();
      return `${stampYears === nowYears ? '' : stampYears.toString().substring(2, 4) + '年'}${stampMonths}${stampDates}日`;
    }
  }
}

觉得不错的话点个赞吧!