小程序仿微信时间处理

人狠话不多,直接上代码:

// util.js页面,封装的公共方法
/**
 * 仿微信时间处理
 * time:时间格式'2020-01-15'或'2020/01/15'或'2020-01-15 15:00'或'2020/01/15 15:00'
 * yStr:日期拼接格式,默认'/'拼接
 * isHours:是否显示时分,默认不显示
 */
function updateTimeShow(time, yStr = "/", isHours = false) {
  time = time.replace(/-/g, '/'); //苹果真机不支持-连接得日期,所以要转成/链接得日期
  const JUST_NOW = 3000;                        //3s内
  const IN_SECOND = 1000 * 60;                  //一分钟
  const IN_MINUTE = 1000 * 60 * 60;             //一小时
  const IN_HOUR = 1000 * 60 * 60 * 12;          //12小时
  const IN_DAY = 1000 * 60 * 60 * 24 * 1;       //24小时
  const IN_MONTH = 1000 * 60 * 60 * 24 * 30;    //1个月
  const IN_YEAR = 1000 * 60 * 60 * 24 * 30 * 12;//1年

  var realtime = '', //最终返回的时间
    localTime = new Date(), //当前系统时间,世界标准时间  
    localDay = (localTime.getDate() < 10) ? ('0' + localTime.getDate()) : localTime.getDate(), //当天系统天数,就是几号
    localMsec = new Date().getTime(), //当前系统时间,毫秒数  
    createTime = new Date(time), //传入的时间,世界标准时间   
    createMsec = new Date(time).getTime(), //消息创建时间,毫秒数  
    diff = localMsec - createMsec, //计算出来得时间戳
    list = new Date(time).toString().split(" "), //将后台返回得时间分割,用于取年月日时分
    year = list[3], //
    month = getNumberMonth(list[1]), //
    day = list[2], //
    hhmmss = list[4].split(':'), //[时:分:秒]
    hourSec = hhmmss[0] + ':' + hhmmss[1]; //时分

  if (diff <= IN_SECOND) { //小于1分钟,显示刚刚
    return '刚刚';
  } else if (diff <= IN_MINUTE && diff > IN_SECOND) { //小于1小时,显示几分钟前
    return parseInt(diff / IN_SECOND) + '分钟前';
  } else if ((diff <= IN_DAY) && (localDay == day)) { //当天小于1天,显示时分
    return realtime = hourSec;
  } else if ((diff <= IN_DAY) && (localDay - day == 1)) { //昨天当天24小时内,显示月日
    return realtime = month + yStr + day;
  } else if ((diff > IN_DAY && diff <= IN_DAY * 2) && (localDay - day <= 1)) { //大于1天&小于2天,显示昨天
    return '昨天  ' + hour + ':' + second;
  } else if ((diff < IN_DAY * 7) && isSameWeek(time)) { //本周时间内小于7天,显示周几+时间
    const t = createTime.toString().slice(0, 3);
    switch (t) {
      case "Mon":
        return '周一 ' + hourSec;
      case "Tue":
        return '周二 ' + hourSec;
      case "Wed":
        return '周三 ' + hourSec;
      case "Thu":
        return '周四 ' + hourSec;
      case "Fri":
        return '周五 ' + hourSec;
      case "Sat":
        return '周六 ' + hourSec;
      case "Sun":
        return '周日 ' + hourSec;
    }
  } else if (diff < IN_YEAR) { //小于1年,显示月日
    if (isHours) { //显示时分
      realtime = month + yStr + day + ' ' + hourSec;
    } else { //不显示时分
      realtime = month + yStr + day;
    }
    return realtime;
  } else if (diff > IN_YEAR) { //大于一年,显示年月日
    return realtime = year + yStr + month + yStr + day;
  }
}

/**
 * 月份转化
 */
function getNumberMonth(month) {
  switch (month) {
    case "Jan":
      return "01";
    case "Feb":
      return "02";
    case "Mar":
      return "03";
    case "Apr":
      return "04";
    case "May":
      return "05";
    case "Jun":
      return "06";
    case "Jul":
      return "07";
    case "Aug":
      return "08";
    case "Sep":
      return "09";
    case "Oct":
      return "10";
    case "Nov":
      return "11";
    case "Dec":
      return "12";
  }
}

/**
 * 判断两个日期是否为同一周
 *  因为1970年1月1 是周4   所以(天数+4)/7 取整 就是周数  如果相同就是同一周反之就不是
经过测试,是以星期一作为每周的第一天的
 */
function isSameWeek(now) {
  var oneDayTime = 1000 * 60 * 60 * 24;
  var old_count = parseInt(new Date().getTime() / oneDayTime);
  var now_other = parseInt(new Date(now).getTime() / oneDayTime);
  // console.log('old周', old_count, 'now周', now_other)
  return parseInt((old_count + 4) / 7) == parseInt((now_other + 4) / 7);
}

// 这个属性是将方法名暴露出来,否则需要引用的页面取不到
module.exports = {
  updateTimeShow,
}
 1 // pages/index/index.js
 2 const util = require('../../utils/util.js');
 3 Page({
 4 
 5     data: {
 6         time: '',  //处理后的日期
 7     },
 8 
 9       /**
10    * 生命周期函数--监听页面加载
11    */
12   onLoad: function (options) {
13     this.setData({
14       time: '转换后的日期::' + util.updateTimeShow('2020-01-15 14:00')
15     })
16   },
17 
18 })
原文地址:https://www.cnblogs.com/rzsyztd/p/12206728.html