美文网首页
util 常用工具库(更新中..)

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

作者: 洪锦一 | 来源:发表于2022-03-29 16:50 被阅读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,
    // }
    

    相关文章

      网友评论

          本文标题:util 常用工具库(更新中..)

          本文链接:https://www.haomeiwen.com/subject/zixbjrtx.html