小程序仿微信时间处理
人狠话不多,直接上代码:
// 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 })