util 常用工具库(更新中..)

2022-03-29  本文已影响0人  洪锦一
// 防抖
// fn 需要做防抖的函数, delay 延迟时间
function debounce(fn, delay = 500) {
    let timer = null;

    //addEventListener 第二个参数是个函数,所以返回函数
    return function () {

        if (timer) clearTimeout(timer)

        timer = setTimeout(() => {
            fn()
        }, delay);
    }
}

// 节流
function throttle(fn, delay = 500) {
    // 初始化timer
    let timer = null
    //addEventListener 第二个参数是个函数,所以返回函数
    return function () {
        // 如果timer有值返回,跳转当前函数
        if (timer) return

        timer = setTimeout(() => {
            fn()
            timer = null
        }, delay);
    }
}

// 随机数UUID
function makeUUID() {
    var S4 = function () {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
    };
    //return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
    return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4());
}

// 得到文件的扩展名
function getFileExt(filename) {
    var d = /\.[^\.]+$/.exec(filename);
    var ext = new String(d);
    var s = ext.toLowerCase();
    return s;
}

//获取今天日期,星期几
function getTodayDate() {
    var now = new Date();
    var yy = now.getFullYear();
    var mm = now.getMonth() + 1;
    var dd = now.getDate();
    var day = new Array();
    day[0] = "星期日";
    day[1] = "星期一";
    day[2] = "星期二";
    day[3] = "星期三";
    day[4] = "星期四";
    day[5] = "星期五";
    day[6] = "星期六";
    return (yy + '年' + mm + '月' + dd + '日 ' + day[now.getDay()]);
}

// 时间戳转成时间
function timeStamp2String(time) {
    var datetime = new Date();
    datetime.setTime(time);
    var year = datetime.getFullYear();
    var month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
    var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
    var hour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
    var minute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
    var second = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
    return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second;
}

// 判断是否为空
function isNull(val) {
    if (val == undefined || val == null || val == "" || val == ''
        || val == "undefined" || val == "null" || val == "NULL") {
        return true;
    }
    return false;
}

// 变量是否为数字
function isNumber(str) {
    var regExp = /^\d+$/g;
    // var regex = /^(\-|\+)?\d+(\.\d+)?$/;
    return regExp.test(str);
}

// 验证是否为电子邮箱
function isEmail(source) {
    var regex = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
    if (source.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) {
        return true;
    } else {
        return false;
    }
}

// 生成指定位数的随机整数
function getRandomNum(count) {
    var arr = new Array;
    var reNum = "";
    for (var i = 0; i < count; i++) {
        arr[i] = parseInt(Math.random() * 10);
        reNum += String(arr[i]);
    }
    return reNum;
}

// 最大最小随机数
function random(min, max) {
    return Math.floor(min + Math.random() * (max - min));
}

// 手机号码验证
function phoneTest(cellPhone) {
    var myreg = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;
    if (!myreg.test(cellPhone)) {
        return false;
    } else {
        return true;
    }
}

// 金额数值验证是否纯数字
function amountTest(num) {
    var myreg = /(^[1-9]{1}[0-9]*$)|(^[0-9]*\.[0-9]{1,2}$)/;
    if (!myreg.test(num)) {
        return false;
    } else {
        return true;
    }
}

// 身份证验证
function validateIdentityCode(code) {
    var city = {
        11: "北京",
        12: "天津",
        13: "河北",
        14: "山西",
        15: "内蒙古",
        21: "辽宁",
        22: "吉林",
        23: "黑龙江 ",
        31: "上海",
        32: "江苏",
        33: "浙江",
        34: "安徽",
        35: "福建",
        36: "江西",
        37: "山东",
        41: "河南",
        42: "湖北 ",
        43: "湖南",
        44: "广东",
        45: "广西",
        46: "海南",
        50: "重庆",
        51: "四川",
        52: "贵州",
        53: "云南",
        54: "西藏 ",
        61: "陕西",
        62: "甘肃",
        63: "青海",
        64: "宁夏",
        65: "新疆",
        71: "台湾",
        81: "香港",
        82: "澳门",
        91: "国外 "
    };
    var pass = true;
    var msg = "验证成功";
    //验证身份证格式(6个地区编码,8位出生日期,3位顺序号,1位校验位)
    if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/.test(code)) {
        pass = false;
        msg = "身份证号格式错误";
    } else if (!city[code.substr(0, 2)]) {
        pass = false;
        msg = "身份证号地址编码错误";
    } else {
        //18位身份证需要验证最后一位校验位
        if (code.length == 18) {
            code = code.split('');
            //加权因子
            var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
            //校验位
            var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
            var sum = 0;
            var ai = 0;
            var wi = 0;
            for (var i = 0; i < 17; i++) {
                ai = code[i];
                wi = factor[i];
                sum += ai * wi;
            }
            if (parity[sum % 11] != code[17].toUpperCase()) {
                pass = false;
                msg = "身份证号校验位错误";
            }
        }
    }
    return {
        flag: pass,
        msg: msg
    };

    // return pass + ' ' + msg
}

//长数字省略显示
function numTimes(browse) {
    if (browse < 1000) {
        return browse;
    }
    var temp = browse;
    if (browse >= 1000 && browse < 10000) {
        var temp = parseInt(browse) / 1000
        temp = temp.toFixed(2) + 'k'
    } else if (browse >= 10000 && browse < 100000000) {
        var temp = parseInt(browse) / 10000
        temp = temp.toFixed(0) + 'w+'
    } else if (browse >= 100000000) {
        var temp = parseInt(browse) / 100000000
        temp = temp.toFixed(0) + '亿+'
    }
    return temp;
}

//限制字数并加...(如果内容小于限制的个数也显示...)
function clampTxt(str, len) {
    var strVal = str + "";
    return strVal.slice(0, len) + "...";
}

//限制字数并加...(如果内容小于限制的个数不显示...)
function subTxt(str, len) {
    var strVal = str + "";
    if (str.length > len) {
        return strVal.slice(0, len) + "...";
    } else {
        return strVal;
    }
}


//获取取年月日   "2022年03月29日12:12:12"
function splitDate(dateStr) {
    return dateStr.substring(0, 10)
}

//加法函数,用来得到精确的加法结果
function floatAdd(arg1, arg2) {
    var r1, r2, m;
    try {
        r1 = arg1.toString().split(".")[1].length
    } catch (e) {
        r1 = 0
    }
    try {
        r2 = arg2.toString().split(".")[1].length
    } catch (e) {
        r2 = 0
    }
    m = Math.pow(10, Math.max(r1, r2));
    return (arg1 * m + arg2 * m) / m;
}

//减法函数,用来得到精确的加法结果
function floatSub(arg1, arg2) {
    var r1, r2, m, n;
    // try {
    //     r1 = arg1.toString().split(".")[1].length
    // } catch (e) {
    //     r1 = 0
    // }
    // try {
    //     r2 = arg2.toString().split(".")[1].length
    // } catch (e) {
    //     r2 = 0
    // }
    r1 = (arg1 + '').split(".")[1] ? (arg1 + '').split(".")[1].length : 0;
    r2 = (arg2 + '').split(".")[1] ? (arg2 + '').split(".")[1].length : 0;
    m = Math.pow(10, Math.max(r1, r2));
    //动态控制精度长度 
    n = (r1 >= r2) ? r1 : r2;
    var a = ((arg1 * m - arg2 * m) / m).toFixed(n);
    return a
}

//乘法函数,用来得到精确的乘法结果
function accMul(arg1, arg2) {
    var m = 0,
        s1 = arg1.toString(),
        s2 = arg2.toString();
    try {
        m += s1.split(".")[1].length
    } catch (e) { }
    try {
        m += s2.split(".")[1].length
    } catch (e) { }
    var a = Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
    return a
}

//除法函数,用来得到精确的除法结果
function accDiv(arg1, arg2) {
    var t1 = 0,
        t2 = 0,
        r1, r2;
    try {
        t1 = arg1.toString().split(".")[1].length
    } catch (e) { }
    try {
        t2 = arg2.toString().split(".")[1].length
    } catch (e) { }

    r1 = Number(arg1.toString().replace(".", ""));

    r2 = Number(arg2.toString().replace(".", ""));
    return (r1 / r2) * Math.pow(10, t2 - t1);
}

// 判断元素是否在数组中
function arrContains(arr, obj) {
    var i = arr.length;
    while (i--) {
        if (arr[i] == obj) {
            return true;
        }
    }
    return false;
}

// 计算两个日期相差
function dateDiff(date1, date2) {
    let startTime = new Date(date1).getTime();
    let endTime = new Date(date2).getTime();
    let duration = (Math.abs(endTime - startTime) / 1000 / 60 / 60 / 24).toFixed(1);
    console.log('duration', duration)
    let data = duration.split('.');
    let num1 = data[0];
    let num2 = data[1];
    if (num2 > 0 && num2 <= 5) {
        num2 = 5;
        duration = num1 + '.' + num2;
    } else if (num2 == 0) {
        duration = num1
    } else {
        num1++
        duration = num1
    }
    duration = parseFloat(duration)
    return duration
}

// export default {
//     debounce,
//     throttle,
//     makeUUID,
//     getFileExt,
//     getTodayDate,
//     timeStamp2String,
//     isNull,
//     isNumber,
//     isEmail,
//     getRandomNum,
//     random,
//     phoneTest,
//     amountTest,
//     validateIdentityCode,
//     numTimes,
//     clampTxt,
//     subTxt,
//     splitDate,
//     floatAdd,
//     floatSub,
//     accMul,
//     accDiv,
//     arrContains,
//     dateDiff,
// }
上一篇下一篇

猜你喜欢

热点阅读