JS聊天消息时间展示(当天时间、昨天时间、本周时间以及日期)

在聊天消息中需要展示消息的时间格式,例如当天的消息展示位 12:12;昨天的消息展示:昨天 12:00;本周消息展示为:周一 12:00,超过本周展示为日期:08-01

看效果图:

JS代码:

function timeFormat() {

    const Time = timeMethod.getTime(time).split("T");
	//当前消息日期属于周
	const week = timeMethod.getDateToWeek(time); 
	//当前日期0时
	const nti = timeMethod.setTimeZero(timeMethod.getNowTime());
	//消息日期当天0时
	const mnti = timeMethod.setTimeZero(timeMethod.getTime(time));
	//计算日期差值
	const diffDate = timeMethod.calculateTime(nti,mnti);
	//本周一日期0时 (后面+1是去除当天时间)
	const fwnti = timeMethod.setTimeZero(timeMethod.countDateStr(-timeMethod.getDateToWeek(timeMethod.getNowTime()).weekID + 1));
	//计算周日期差值
	const diffWeek = timeMethod.calculateTime(mnti,fwnti);
	
	if (diffDate === 0) { 				//消息发送日期减去当天日期如果等于0则是当天时间
		return Time[1].slice(0,5);
	} else if (diffDate < 172800000) { //当前日期减去消息发送日期小于2天(172800000ms)则是昨天-  一天最大差值前天凌晨00:00:00到今天晚上23:59:59
		return "昨天 " + Time[1].slice(0,5);
	} else if (diffWeek >= 0) { 		//消息日期减去本周一日期大于0则是本周
		return week.weekName;
	} else { 							//其他时间则是日期
		return Time[0].slice(5,10);
	}

}

上方代码块有时间工具类 timeMethod.js

class TimeMethod {
	
	constructor() {}
	
	//日期格式化
	addZero(data) {
		if (parseInt(data) < 10) {
			return "0" + String(data);
		}
		return data;
	}	
	
	/**
	 * 获取当前日期
	 */
	getNowTime() {
		const myDate = new Date();
		const year = myDate.getFullYear();
		const mouth = this.addZero(myDate.getMonth() + 1);
		const day = this.addZero(myDate.getDate());
		const hour = this.addZero(myDate.getHours());
		const minute = this.addZero(myDate.getMinutes());
		const second = this.addZero(myDate.getSeconds());
		return year + '-' + mouth + '-' + day + 'T' + hour+ ':' + minute+ ':' + second
	}
	
	/**
	 * 根据时间返回标准字符串时间
	 * @param {Object} time
	 */
	getTime(time) {
		const myDate = new Date(time);
		const year = myDate.getFullYear();
		const mouth = this.addZero(myDate.getMonth() + 1);
		const day = this.addZero(myDate.getDate());
		const hour = this.addZero(myDate.getHours());
		const minute = this.addZero(myDate.getMinutes());
		const second = this.addZero(myDate.getSeconds());
		return year + '-' + mouth + '-' + day + 'T' + hour+ ':' + minute+ ':' + second
	}
	
	/**
	 * @param {Object} timestamp
	 * @param {Object} type
	 * 时间戳转时间
	 */
	timestampToTime(timestamp,type) {
			if(String(timestamp).length===10) {
				//时间戳为10位需*1000
				var date = new Date(timestamp * 1000);
			}else {
				var date = new Date(timestamp);
			}
	        const Y = date.getFullYear() + '-';	
	        const M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';	
	        const D = date.getDate() + ' ';	
	        const h = date.getHours() + ':';	
	        const m = date.getMinutes() + ':';	
	        const s = date.getSeconds();
			if(type==="date") {
				return Y+M+D;
			}else {
				return Y+M+D+h+m+s;
			}
	    }
		
		
	/**
	 * @param {Object} time
	 * 时间转时间戳
	 */
	timeToTimestamp(time) {
		//精确到秒,毫秒用000代替 :Date.parse(date); 
		return new Date(time).getTime(); 
	}
	
	
	/**
	 * @param {Object} startTime
	 * @param {Object} endTime
	 * 日期计算
	 */
	calculateTime(startTime,endTime) {
		return new Date(startTime) - new Date(endTime)
	}
	
	/**
	 * @param {Object} time
	 * 日期转星期
	 */
	getDateToWeek(time) {
		let weekArrayList = [
		{"weekID":7,"weekName":"星期日"},
		{"weekID":1,"weekName":"星期一"},
		{"weekID":2,"weekName":"星期二"},
		{"weekID":3,"weekName":"星期三"},
		{"weekID":4,"weekName":"星期四"},
		{"weekID":5,"weekName":"星期五"},
		{"weekID":6,"weekName":"星期六"}];
		return weekArrayList[new Date(time).getDay()]
	}
	
	/**
	 * @param {Object} date
	 *  yyyy-MM-dd HH:mm:ss转为   yyyy-MM-ddTHH:mm:ss
	 */
	timeFormat(date,type) {
		if (type == "T")
			return date.replace(" ","T")
		else
			return date.replace("T"," ")
	}
	
	/**
	 * @param {Object} time
	 * 定时器
	 */
	timeSleep(time) {
		return new Promise((resolve) => setTimeout(resolve,time))
	}
	
	
	/**
	 * 根据日期加减计算日期
	 * @param dayCount
	 */
	countDateStr(dayCount) {
		let dd = new Date();
		dd.setDate(dd.getDate()+ dayCount);
		let ms = dd.getTime();
		return new Date(ms).toJSON();
	}
	
	/**
	 * @param {Object} time
	 * 日期中时间置0
	 */
	setTimeZero(time) {
		return time.slice(0,10) + 'T00:00:00.000+00:00';
	}

}


export default new TimeMethod();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二九筒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值