js日期-时间差语义化(前天,昨天,几小时前,刚刚)

console.log(new Date("2022-02-22").getMonth())//1
console.log(new Date("2022,02,22").getMonth())//1
console.log(new Date(2022,0o2,22).getMonth())//2
/**
     * 时间差语义化 前天 昨天 几小时前 刚刚
     * @param dateTimeStamp 要比较的时间值---同new Date()的传参 但是不要传类似 new Date(2021,12,01),要传字符串或者毫秒时间戳
     * @returns {string}
     */
    function getDateDiff(dateTimeStamp) {
        // 要比较的时间变量
        let compareTime = new Date(dateTimeStamp)
        let timestamp = compareTime.getTime();
        let compareHour = compareTime.getHours()
        let compareMinute = compareTime.getMinutes()

        //计算单位常量
        let minute = 1000 * 60;
        let hour = minute * 60;
        let day = hour * 24;
        let halfamonth = day * 15;
        let month = day * 30;
        let year = day * 365;

        //今天的时间
        let now = new Date().getTime();

        //时间差
        let diffValue = now - timestamp;

        //结果
        let result;

        if (diffValue < 0) {
            throw new Error("不能选未来的时间")
        }
        let yearC = diffValue / year;
        let monthC = diffValue / month;
        let weekC = diffValue / (7 * day);
        let dayC = diffValue / day;
        let hourC = diffValue / hour;
        let minC = diffValue / minute;

        if (isLastYesterday(timestamp)) {
            result = `前天${zeroize(compareHour)}:${zeroize(compareMinute)}`
        } else if (isYesterday(timestamp)) {
            result = `昨天${zeroize(compareHour)}:${zeroize(compareMinute)}`
        } else if (yearC >= 1) {
            result = `${parseInt(yearC)}年前`
        } else if (monthC >= 1) {
            result = `${parseInt(monthC)}月前`
        } else if (weekC >= 1) {
            result = `${parseInt(weekC)}周前`
        } else if (dayC >= 1) {
            result = `${parseInt(dayC)}天前`
        } else if (hourC >= 1) {
            result = `${parseInt(hourC)}小时前`
        } else if (minC >= 1) {
            result = `${parseInt(minC)}分钟前`
        } else {
            result = "刚刚"
        }
        return result;
    }

    // 补0
    function zeroize(num) {
        return num < 10 ? "0" + num : num
    }

    // 判断是否是昨天
    function isYesterday(time) {
        const date = new Date();
        const year = date.getFullYear();
        const month = date.getMonth() + 1;
        const day = date.getDate();
        const today = `${year}/${month}/${day}`;
        const todayTime = new Date(today).getTime(); // 当天凌晨的时间
        const yesterdayTime = new Date(todayTime - 24 * 60 * 60 * 1000).getTime(); // 昨天凌晨的时间
        return time < todayTime && yesterdayTime <= time;
    }
    

    //是否是前天
    function isLastYesterday(time) {
        const twentyFourHours = 24 * 60 * 60 * 1000;
        const fortyEightHours = 24 * 60 * 60 * 1000 * 2;
        const date = new Date();
        const year = date.getFullYear();
        const month = date.getMonth() + 1;
        const day = date.getDate();
        const today = `${year}/${month}/${day}`;
        const todayTime = new Date(today).getTime(); // 当天凌晨的时间
        const yesterdayTime = new Date(todayTime - twentyFourHours).getTime(); // 昨天凌晨的时间
        const lastYesterdayTime = new Date(todayTime - fortyEightHours).getTime(); // 昨天凌晨的时间
        return time < yesterdayTime && lastYesterdayTime <= time;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值