业务场景:商城显示订单的购买记录,需要显示几天前,几小时前,几分钟前,几秒前。
最快肯定是ctrl c
和ctrl v
,于是一搜,全是:
function formatTime(stringTime) {
let str = stringTime;
//将字符串转换成时间格式
let timePublish = new Date(str);
let timeNow = new Date();
let minute = 1000 * 60;
let hour = minute * 60;
let day = hour * 24;
let month = day * 30;
let year = month * 12;
let diffValue = timeNow - timePublish;
let diffMonth = diffValue / month;
let diffWeek = diffValue / (7 * day);
let diffDay = diffValue / day;
let diffHour = diffValue / hour;
let diffMinute = diffValue / minute;
let diffYear = diffValue / year;
let result = null
if (diffValue < 0) {
result = "刚刚";
} else if (diffYear > 1) {
result = parseInt(diffYear) + "年前";
} else if (diffMonth > 1) {
result = parseInt(diffMonth) + "月前";
} else if (diffWeek > 1) {
result = parseInt(diffWeek) + "周前";
} else if (diffDay > 1) {
result = parseInt(diffDay) + "天前";
} else if (diffHour > 1) {
result = parseInt(diffHour) + "小时前";
} else if (diffMinute > 1) {
result = parseInt(diffMinute) + "分钟前";
} else {
result = "刚刚";
}
return result;
}
console.log(formatTime('2021-12-22 17:42:09'));
看着这if else分支实在让我难受,于是自己动手封装
/**
* @param {date} time 订单时间(日期格式或者时间戳)
* @param {number} num 返回几个时间单位,如:1周(num=1),1周2天(num=2),1周2天1小时(num=3)
*/
function formatTime(time, num = 1){
let timeArr = [365*24*60*60*1000, 30*24*60*60*1000, 7*24*60*60*1000, 24*60*60*1000, 60*60*1000,60*1000, 1000];
let unit = ["年", "个月", "周", "天", "小时", "分钟", "秒钟"];
let timeDiff = Date.now() - new Date(time).getTime();
if (timeDiff <= 0) return '刚刚'
let tip = [];
for(let i= 0; i< timeArr.length; i++){
if(timeDiff < timeArr[i]) continue;
let temp = Math.floor(timeDiff / timeArr[i]);
timeDiff = timeDiff % timeArr[i];
if(temp > 0){
tip.push(temp + unit[i]);
}
if(tip.length >= num) break;
}
return tip.join("")+"前"
}
console.log(formatTime('2023-5-10 17:42:09', 1));
// 1小时前
舒坦了……