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日
原理:
主要就是通过获取两个时间(传入的时间、现在的时间)相差的毫秒数,在计算相差的天数,小时数、分钟数和秒数,再通过一些判断返回对应的字符串
结束语:
要是输出的不符合你的要求,可以将函数最后的逻辑部分改成自己的风格
写的不好,还请见谅。若有错误,烦请指出,谢谢