js 格式化间隔时间(如:2分钟前)

function formatIntervalTime(timeStr) {
	const targetTime = new Date(timeStr);
	const presentTime = new Date();

	const date1 = targetTime.valueOf();
	const date2 = presentTime.valueOf();

	let startTime,
		endTime,
		future = false;

	// 判断开始时间和结束时间
	if (date1 > date2) {
		future = true;
		startTime = date2;
		endTime = date1 + 1000;
	} else {
		startTime = date1;
		endTime = date2;
	}

	const difference = endTime - startTime; //时间差的毫秒数

	//计算出相差天数
	const days = Math.floor(difference / (24 * 3600 * 1000));

	//计算出小时数
	const leave1 = difference % (24 * 3600 * 1000); //计算天数后剩余的毫秒数
	const hours = Math.floor(leave1 / (3600 * 1000));

	//计算相差分钟数
	const leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数
	const minutes = Math.floor(leave2 / (60 * 1000));

	//计算相差秒数
	const leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数
	const seconds = Math.round(leave3 / 1000);

	if (seconds >= 0 && days === 0 && hours === 0 && minutes === 0) {
		// 时间相差在一分钟内
		return '刚刚';
	} else if (minutes > 0 && days === 0 && hours === 0) {
		// 时间相差在一小时内
		return minutes + '分钟' + (future ? '后' : '前');
	} else if (hours > 0 && days === 0) {
		// 时间相差在一天内
		return hours + '小时' + (future ? '后' : '前');
	} else if (days > 0) {
		// 时间相差大于一天
		if (days === 1) {
			// 时间相差在一天以上小于两天
			return future ? '明天' : '昨天';
		} else if (days < 4) {
			// 时间相差在三天内
			return days + '天' + (future ? '后' : '前');
		} else if (days > 3) {
			// 时间相差大于三天
			const y = targetTime.getFullYear();
			const m = targetTime.getMonth() + 1;
			const d = targetTime.getDate();

			if (y === presentTime.getFullYear()) {
				// 时间相差在一年内
				return m + '月' + d + '日';
			} else {
				// 时间相差大于一年
				return y + '年' + m + '月' + d + '日';
			}
		}
	}
};

使用:

// 基准时间 2022-11-23 18:00:34
// 相差一分钟内
formatIntervalTime('2022-11-23 18:00:30'); // 返回:刚刚
// 相差一小时内
formatIntervalTime('2022-11-23 17:59:34'); // 返回:1分钟前
// 相差一天内
formatIntervalTime('2022-11-23 17:00:34'); // 返回:1小时前
// 相差大于一天小于两天
formatIntervalTime('2022-11-22 18:00:34'); // 返回:昨天
// 相差小于三天
formatIntervalTime('2022-11-21 18:00:34'); // 返回:2天前
// 相差大于三天
formatIntervalTime('2022-09-24 18:00:34'); // 返回:9月24日
// 相差大于一年
formatIntervalTime('2021-11-28 18:00:34'); // 返回:2021年11月28日

原理:

主要就是通过获取两个时间(传入的时间、现在的时间)相差的毫秒数,在计算相差的天数,小时数、分钟数和秒数,再通过一些判断返回对应的字符串

结束语:

要是输出的不符合你的要求,可以将函数最后的逻辑部分改成自己的风格

写的不好,还请见谅。若有错误,烦请指出,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts是一个用于可视化数据的JavaScript库,其提供了丰富的图表类型和灵活的配置选项,使用户可以轻松地将数据转化为易于理解和分析的图形形式。 对于Echarts中的series(系列)数据,如果其中的时间数据不希望以默认格式显示,我们可以通过对时间数据进行格式化来实现自定义显示。 首先,需要确定series中的时间数据的类型,常见的有时间戳类型和字符串类型。对于时间戳类型的数据,我们可以通过JavaScript中的Date对象对其进行格式化。例如,可以使用toDateString()函数将时间戳转化为字符串格式的日期表示。 若时间数据为字符串类型,则我们可以基于字符串的长度和格式,使用substring()、slice()、replace()等字符串方法来进行格式化。例如,假设时间字符串的格式为"YYYY-MM-DD hh:mm:ss",我们可以通过substr()方法提取出相应的年月日时分秒,并通过自定义的方式拼接成新的字符串格式。 在对时间数据进行格式化之后,将格式化后的数据赋给相应的series中的时间字段即可。重新渲染图表时,该时间字段将以我们定义的格式进行显示。 需要注意的是,Echarts还提供了针对时间轴的进一步操作和配置选项,包括时间范围、时间间隔等等,可以根据实际需求进行相应的设置和调整。 通过以上的方法,可以实现对Echarts系列数据中时间字段的自定义格式化,使得图表中的时间信息更加符合自己的需求和展示要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值