js常用工具函数总结

由于博客内容为空,暂无法提供包含关键信息的摘要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
    目录:
    (1)序列化时间 / 获取当前序列化后的时间  dateFormat
    (2)获取当前日期前或指定时间,前一定范围的时间  getAssignTime
    (3)判断是否是1366分辨率  is1366Screen
    (4)获取echarts中X轴数据  getXList
    (5)函数防抖 debounce
    (6)函数节流 throttle
    (7)获取url后面的参数 queryUrlParameter
*/


/** (1)
 * @description:  序列化时间 / 获取时间   
 * @param {*} fmt 间格式参数 
 * @param {*} date 为时间对象,默认为当前时间   eg: new Date()
 * @return {*}
 */
function dateFormat(fmt, date) {
    date = date || new Date(); // 判断是否传参
    let ret;
    const opt = {
        "Y+": date.getFullYear().toString(), // 年
        "m+": (date.getMonth() + 1).toString(), // 月
        "d+": date.getDate().toString(), // 日
        "H+": date.getHours().toString(), // 时
        "M+": date.getMinutes().toString(), // 分
        "S+": date.getSeconds().toString() // 秒
        // 有其他格式化字符需求可以继续添加,必须转化成字符串
    };
    for (let k in opt) {
        ret = new RegExp("(" + k + ")").exec(fmt);
        if (ret) {
            // fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
            if (ret[1].length == 1) {
                fmt = fmt.replace(ret[1], opt[k]);
            } else {
                for (let i = opt[k].length; i < ret[1].length; i++) {
                    opt[k] = '0' + opt[k];
                }
                fmt = fmt.replace(ret[1], opt[k]);
            }
        }
    }
    return fmt;
}

/**(2)
 * @description: 获取当前日期前或者后指定时间
 * @param {*} compareTime 对比的时间数
 * @param {*} type 需要获得在原来对比的时间类型   d---日  M---月  y---年  h---时  m---分           
 * @param {*} date 默认为当前时间
 * @param {*} format 时间格式化  --  参照dateFormat函数  默认为YYYY-mm-dd 
 * @return {*}
 */
function getAssignTime(compareTime, type, date, format) {
    date = date || new Date(); // 判断是否传参
    format = format || "YYYY-mm-dd";
    switch (type) {
        case 'd':
            date = date.setDate((date.getDate() - compareTime))
            date = dateFormat(format, new Date(date));
            break;
        case 'M':
            date = date.setMonth((date.getMonth() - compareTime))
            date = dateFormat(format, new Date(date));
            break;
        case 'y':
            date = date.setYear((date.getFullYear() - compareTime))
            date = dateFormat(format, new Date(date));
            break;
        case 'h':
            date = date.setHours((date.getHours() - compareTime))
            date = dateFormat(format, new Date(date));
            break;
    }
    return date;
}

/** (3)
 * @description: 判断是否是1366分辨率
 * @param {*}
 * @return {*} 返回true  or  false
 */
function is1366Screen() {
    let screenWidth = document.body.clientWidth;
    if (screenWidth < 1400) {
        return true;
    } else {
        return false;
    }
}

/** (4)
 * @description: 获取echarts中X轴数据
 * @param {*} type 需要获取的类型    day - 日    month - 月    year - 年
 * @param {*} length 需要获取的长度  往前数
 * @return {*}
 */
function getXList(type, length) {
    var lastMonth = [];
    for (var i = 0; i < length; i++) {
        lastMonth.unshift(new Date(new Date()
                .setDate(new Date().getDate() - i))
            .toLocaleString().substring(0, 10))
    }
    return lastMonth
}


/** (5)
 * @desc 函数防抖
 * @param func 函数
 * @param wait 延迟执行毫秒数
 * @param immediate true 表立即执行,false 表非立即执行
 */
function debounce(func, wait, immediate) {
    let timeout;
    return function () {
        const context = this;
        const args = [...arguments];
        if (timeout) clearTimeout(timeout);
        if (immediate) {
            const callNow = !timeout;
            timeout = setTimeout(() => {
                timeout = null;
            }, wait)
            if (callNow) func.apply(context, args)
        } else {
            timeout = setTimeout(() => {
                func.apply(context, args)
            }, wait);
        }
    }
}



/** (6)
 * @desc 函数节流
 * @param func 函数
 * @param wait 延迟执行毫秒数
 * @param type 1 表时间戳版,2 表定时器版
 */
function throttle(func, wait, type) {
    let previous, timeout;
    if (type === 1) {
        previous = 0;
    } else if (type === 2) {
        timeout;
    }
    return function () {
        let context = this;
        let args = arguments;
        if (type === 1) {
            let now = Date.now();

            if (now - previous > wait) {
                func.apply(context, args);
                previous = now;
            }
        } else if (type === 2) {
            if (!timeout) {
                timeout = setTimeout(() => {
                    timeout = null;
                    func.apply(context, args)
                }, wait)
            }
        }

    }
}


/** (7)
 * @description: 获取url后面的参数
 * @param {*} str - url
 * @return {*} 对象
 */
function queryUrlParameter(str) {
    let obj = {}
    let reg = /([^?=&#]+)=([^?=&#]+)/g;
    str.replace(reg, function () {
        obj[arguments[1]] = arguments[2]
    })
    //如果加上hash
    // reg = /#([^?&=#]+)/g
    // if (reg.test(str)) {
    //     str.replace(reg, function () {
    //         obj.hash = arguments[1]
    //     })
    // }
    return obj
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值