js计算几天前,几小时前,几分钟前,几秒前


业务场景:商城显示订单的购买记录,需要显示几天前,几小时前,几分钟前,几秒前。

最快肯定是ctrl cctrl 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小时前

舒坦了……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浪子快跑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值