公共方法集合

本文提供了一系列JavaScript实用函数,包括用于优化性能的截流和防抖函数,金额格式化方法,过滤字符串两侧空格的工具函数,以及获取最近一段时间范围的函数,如最近一个月、三个月和六个月的时间对象。这些函数对于前端开发和数据处理非常有用。
摘要由CSDN通过智能技术生成
/**
 * 截流
 * */
export const throttle = (func, delay) => {
    let prev = Date.now();
    return function () {
        const context = this;
        const args = arguments;
        const now = Date.now();
        if (now - prev >= delay) {
            func.apply(context, args);
            prev = Date.now();
        }
    };
};

funcName: throttle(function(){

},time)

/**
 * 防抖
 * */
export const debounce = (fn, delay, scope) => {
    let timer = null;
    return function () {
        let context = scope || this,
            args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
            fn.apply(context, args);
        }, delay);
    };
};

funcName:debounce(function () {
     
 },time)

/**
 * 金额格式化
 * */
export const fmoney = (num) => {
    if (num) {
        let amount = num.split('.')[0];
        if (amount && amount.length >= 4) {
            amount = amount.split('');
            amount.splice(-3, 0, ',');
            amount = amount.join('');
            let ss = num.split('.')[1] || '';
            ss = ss != '' ? '.' + ss : '';
            return amount + ss;
        } else {
            return num;
        }
    }
    return '';
};

fmoney(amount)

/**
 * 过滤字符串两边空格
 * @param str
 * @returns {string}
 */
export const trim = (str = '') => {
    try {
        str = `${str}`;
        let type = typeof str;
        let result = str.replace(/(^\s*)|(\s*$)/g, "");
        return type === 'string' ? result : type === 'number' ? Number(str) : str;
    } catch (e) {
        return str;
    }
};

trim(str)
/**
 * 最近一个月时间范围
 */
export const getLast1Month = (time=new Date())=> {
    var now = new Date(time);
    var year = now.getFullYear();
    var month = now.getMonth() + 1;//0-11表示1-12月
    var day = now.getDate();
    var dateObj = {};
    dateObj.now = year + '-' + (month<10?'0'+month:month) + '-' + (day<10?'0'+day:day);
    var nowMonthDay = new Date(year, month, 0).getDate();    //当前月的总天数
    if(month - 1 <= 0){ //如果是1月,年数往前推一年<br>    
        dateObj.last = (year - 1) + '-' + 12 + '-' + day;
    }else{
        var lastMonthDay = new Date(year, (parseInt(month) - 1), 0).getDate();
        let newDay = (lastMonthDay < day)?(day < nowMonthDay)?(lastMonthDay - (nowMonthDay - day)):lastMonthDay:day
        dateObj.last = year + '-' + ((month - 1)<10?'0'+(month - 1):(month - 1)) + '-' + (newDay<10?'0'+newDay:newDay);
    }
    return dateObj
}
/**
 * 最近三个月时间范围
 */
export const getLast3Month =(time=new Date())=> {
    var now = new Date(time);
    var year = now.getFullYear();
    var month = now.getMonth() + 1;//0-11表示1-12月
    var day = now.getDate();
    var dateObj = {};
    dateObj.now = year + '-' + (month<10?'0'+month:month) + '-' + (day<10?'0'+day:day);
    if (parseInt(month) === 1) {//如果是1月份,则取上一年的10月份
        dateObj.last = (parseInt(year) - 1) + '-10-' + (day<10?'0'+day:day);
        return dateObj;
    }
    if (parseInt(month) === 2) {//如果是2月份,则取上一年的11月份
        dateObj.last = (parseInt(year) - 1) + '-11-' + (day<10?'0'+day:day);
        return dateObj;
    }
    if (parseInt(month) === 3) {//如果是3月份,则取上一年的12月份
        dateObj.last = (parseInt(year) - 1) + '-12-' + (day<10?'0'+day:day);
        return dateObj;
    }

    var preSize = new Date(year, parseInt(month) - 3, 0).getDate();//开始时间所在月的总天数
    if (preSize < parseInt(day)) {
        // 开始时间所在月的总天数<本月总天数,比如当前是5月30日,在2月中没有30,则取下个月的第一天(3月1日)为开始时间
        let resultMonth = parseInt(month) - 2 < 10 ? ('0' + parseInt(month) - 2) : (parseInt(month) - 2);
        dateObj.last = year + '-' + resultMonth + '-01';
        return dateObj;
    }

    if (parseInt(month) <= 10) {
        dateObj.last = year + '-0' + (parseInt(month) - 3) + '-' + (day<10?'0'+day:day);
        return dateObj;
    } else {
        dateObj.last = year + '-0' + (parseInt(month) - 3) + '-' + (day<10?'0'+day:day);
        return dateObj;
    }
}

/**
 * 最近半年时间
 * @returns {{last:开始时间;now:结束时间}}
 */
export const getLast6Month = (time=new Date())=>{
    var now = new Date(time);
    var year = now.getFullYear();
    //0-11表示1-12月
    var month = now.getMonth() + 1;
    var day = now.getDate();
    var dateObj = {};

    dateObj.now = year + '-' + (month<10?'0'+month:month) + '-' + (day<10?'0'+day:day);
    //当前月的总天数
    var nowMonthDay = new Date(year, month, 0).getDate();
    //如果是1、2、3,4,5,6月,年数往前推一年
    var last3MonthDay = ''
    if(month - 6 <= 0){
        //6个月前所在月的总天数
        last3MonthDay = new Date((year - 1), (12 - (6 - parseInt(month))), 0).getDate();
        //6个月前所在月的总天数小于现在的天日期
        let month_6 = (12 - (6 - month)) < 10 ? '0'+ (12 - (6 - month)) : (12 - (6 - month))

        if(last3MonthDay > day){
            dateObj.last = (year - 1) + '-' + month_6  + '-' + (day<10?'0'+last3MonthDay:last3MonthDay);
        }else{
            dateObj.last = (year - 1) + '-' + month_6 + '-' + (day<10?'0'+day:day);
        }
    }else{
        //6个月前所在月的总天数
        last3MonthDay = new Date(year, (parseInt(month) - 6), 0).getDate();
        //6个月前所在月的总天数小于现在的天日期
        const month_6 = (month - 6) < 10 ? '0' + (month - 6) : (month - 6)

        if(last3MonthDay < day){
            //当前天日期小于当前月总天数,2月份比较特殊的月份
            if(day < nowMonthDay){
                dateObj.last = year + '-' + month_6 + '-' + ((last3MonthDay - (nowMonthDay - day))<10?'0'+(last3MonthDay - (nowMonthDay - day)):(last3MonthDay - (nowMonthDay - day)));
            }else{
                dateObj.last = year + '-' + month_6 + '-' + (last3MonthDay<10?'0'+last3MonthDay:last3MonthDay);
            }
        }else{
            dateObj.last = year + '-' + month_6 + '-' + (day<10?'0'+day:day);
        }
    }
    return dateObj
}


/**
 * 获得时间差
 * @params {{date:结束时间;startDate:开始时间}}
 * */
export const timeDifference = (date, startDate) => {
    if (!(date instanceof Date))
        return undefined;
    //先获得开始时间
    let nowDate = startDate || new Date()
    // 设置成同一时间
    date.setHours(0);
    date.setMinutes(0);
    date.setSeconds(0);
    nowDate.setHours(0);
    nowDate.setMinutes(0);
    nowDate.setSeconds(0);
    //计算时间差
    let timeDis = date - nowDate * 1
    let millisDay = 1000 * 60 * 60 * 24
    return Math.ceil(timeDis / millisDay);
}


/**
 * js方式获取两个日期间的所有日期(天数)
 * @param start '2020/9/01',
 * @param end '2020/09/30'
 * @returns {[]}
 */
export const getDateBetween = (start, end) =>{
    let result = [];
    //使用传入参数的时间
    const startTime = new Date(start);
    const endTime = new Date(end);
    while (endTime - startTime >= 0) {
        let year = startTime.getFullYear();
        let month = startTime.getMonth();
        month = month<9?'0'+(month+1):month+1;
        let day = startTime.getDate().toString().length == 1 ? "0" + startTime.getDate() : startTime.getDate();
        //加入数组
        result.push(year + "-" + month + "-" + day);
        //更新日期
        startTime.setDate(startTime.getDate() + 1);
    }
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值