javascript 常用函数

1、时间格式化

/**
 * @export 时间格式化
 * @param {time} 需要格式化的时间对象、字符串、时间戳
 * @param {cFormat} {y}-{m}-{d} {h}:{i}:{s} {a} 可选
 * @returns {string} 格式化后的时间
 */
function parseTime(time, cFormat) {
	if (arguments.length === 0) {
		return null;
	}
	const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}';
	let date;
	if (typeof time === 'object') {
		date = time;
	} else {
		if (('' + time).length === 10) time = parseInt(time) * 1000
		date = new Date(time);
	}
	const formatObj = {
		y: date.getFullYear(),
		m: date.getMonth() + 1,
		d: date.getDate(),
		h: date.getHours(),
		i: date.getMinutes(),
		s: date.getSeconds(),
		a: date.getDay()
	}
	const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
		if (formatObj.a == 0) formatObj.a = 7;
		let value = formatObj[key];
		if (key === 'a') return ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'][value - 1];
		if (result.length > 0 && value < 10) value = '0' + value;
		return value || 0;
	});
	return time_str;
}

2、根据出生日期算出年龄

/**
 * @export 根据出生日期算出年龄
 * @param {sBirthday} 出生日期 2000-01-01
 * @returns {string} 周岁
 */
function getAge(sBirthday) {
	var returnAge;
	var strBirthdayArr = sBirthday.split("-");
	var birthYear = strBirthdayArr[0];
	var birthMonth = strBirthdayArr[1];
	var birthDay = strBirthdayArr[2];
	var d = new Date();
	var nowYear = d.getFullYear();
	var nowMonth = d.getMonth() + 1;
	var nowDay = d.getDate();
	if (nowYear == birthYear) {
		returnAge = 0; //同年 则为0岁
	} else {
		var ageDiff = nowYear - birthYear; // 计算年之差
		if (ageDiff > 0) {
			if (nowMonth == birthMonth) {
				var dayDiff = nowDay - birthDay; // 计算日之差
				if (dayDiff < 0) {
					returnAge = ageDiff - 1;
				} else {
					returnAge = ageDiff;
				}
			} else {
				var monthDiff = nowMonth - birthMonth; // 计算月之差
				if (monthDiff < 0) {
					returnAge = ageDiff - 1;
				} else {
					returnAge = ageDiff;
				}
			}
		} else {
			returnAge = -1; // 返回-1 表示出生日期输入错误 晚于今天
		}
	}
	return returnAge; // 返回周岁年龄
}

3、银行卡号码验证

/**
 * @export 根据出生日期算出年龄
 * @param {card} 需要验证的银行卡号码
 * @returns {boolean}
 */
function isBankCard(card) {
		let lastNum = card.substr(card.length - 1, 1);      // 取出最后一位(与luhn进行比较)
		let first15Num = card.substr(0, card.length - 1);   // 前15或18位
		let newArr = new Array();
		for (let i = first15Num.length - 1; i > -1; i--) {      // 前15或18位倒序存进数组
			newArr.push(first15Num.substr(i, 1));
		}
		let arrJiShu = new Array();                             // 奇数位*2的积 <9
		let arrJiShu2 = new Array();                            // 奇数位*2的积 >9
		let arrOuShu = new Array();                             // 偶数位数组
		for (let j = 0; j < newArr.length; j++) {
			if ((j + 1) % 2 == 1) {                             // 奇数位
				if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);
				else arrJiShu2.push(parseInt(newArr[j]) * 2);
			} else {                                             // 偶数位
				arrOuShu.push(newArr[j]);
			}
		}
		let jishu_child1 = new Array();                         // 奇数位*2 >9 的分割之后的数组个位数
		let jishu_child2 = new Array();                         // 奇数位*2 >9 的分割之后的数组十位数
		for (let h = 0; h < arrJiShu2.length; h++) {
			jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
			jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
		}
		let sumJiShu = 0;                                       // 奇数位*2 < 9 的数组之和
		let sumOuShu = 0;                                       // 偶数位数组之和
		let sumJiShuChild1 = 0;                                 // 奇数位*2 >9 的分割之后的数组个位数之和
		let sumJiShuChild2 = 0;                                 // 奇数位*2 >9 的分割之后的数组十位数之和
		let sumTotal = 0;
		for (let m = 0; m < arrJiShu.length; m++) {
			sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
		}
		for (let n = 0; n < arrOuShu.length; n++) {
			sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
		}
		for (let p = 0; p < jishu_child1.length; p++) {
			sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
			sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
		}
		// 计算总和
		sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2);
		// 计算luhn值
		let k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
		let luhn = 10 - k;
		if (lastNum == luhn) {
			return true;
		} else {
			return false;
		}
	}

4、根据身份证号获取年龄

/**
 * @export 根据身份证号获取年龄
 * @param {psidno} 身份证号码
 * @returns {number} 年龄
 */
function getAgeByIdCardNum(psidno) {
        let len = (psidno + "").length;
        if (len == 0) {
            return "错误的身份证号码,请核对!";
        } else {
            if ((len != 15) && (len != 18) && isIdCard(psidno)){    //身份证号码只能为15位或18位其它不合法
                return "错误的身份证号码,请核对!";
            }
        }
        let strBirthday = "";
        if (len == 18){     //处理18位的身份证号码从号码中得到生日和性别代码
            strBirthday = psidno.substr(6, 4) + "/" + psidno.substr(10, 2) + "/" + psidno.substr(12, 2);
        }
        if (len == 15) {    //处理15位的身份证号码从号码中得到生日和性别代码
            strBirthday = "19" + psidno.substr(6, 2) + "/" + psidno.substr(8, 2) + "/" + psidno.substr(10, 2);
        }
        //时间字符串里,必须是“/”
        let birthDate = new Date(strBirthday);
        let nowDateTime = new Date();
        let age = nowDateTime.getFullYear() - birthDate.getFullYear();
        //再考虑月、天的因素;.getMonth()获取的是从0开始的,这里进行比较,不需要加1
        if (nowDateTime.getMonth() < birthDate.getMonth() || (nowDateTime.getMonth() == birthDate.getMonth() && nowDateTime.getDate() < birthDate.getDate())) {
            age--;
        }
        return age;
    }

5、根据身份证号码获取性别

/**
 * @desc 根据身份证号获得性别
 * @param {psidno} 身份证号 psidno
 * @returns {String}:性别 'F':女,'M':男
 */
function getSexByIdCardNum(psidno) {
   var sexno,
       sex;
   if (isIdCard(psidno)) {
       if (psidno.length == 18) {
           sexno = psidno.substring(16, 17);
       } else if (psidno.length == 15) {
           sexno = psidno.substring(14, 15);
       }
   } else {
       return "错误的身份证号码,请核对!";
   }
   let tempid = sexno % 2;
   if (tempid == 0) {
       sex = 'F';
   } else {
       sex = 'M';
   }
   return sex;
}

6、数字转人民币大写

/**
 * @desc 数字转人民币大写
 * @param {money} 数字金额
 * @returns 大写的金额
 */
function convertChineseMoney(money) {
    let cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //汉字的数字
    let cnIntRadice = new Array("", "拾", "佰", "仟");     //基本单位
    let cnIntUnits = new Array("", "万", "亿", "兆");      //对应整数部分扩展单位
    let cnDecUnits = new Array("角", "分", "毫", "厘");    //对应小数部分单位
    let cnInteger = "整";                                 //整数金额时后面跟的字符
    let cnIntLast = "元";                                 //整型完以后的单位
    let maxNum = 999999999999999.9999;                    //最大处理的数字
    let IntegerNum;                                       //金额整数部分
    let DecimalNum;                                       //金额小数部分
    let ChineseStr = "";                                  //输出的中文金额字符串
    let parts;                                            //分离金额后用的数组,预定义
    if (money == "") {
        return "";
    }
    money = parseFloat(money);
    if (money >= maxNum) {
        return "超出最大处理数字";
    }
    if (money == 0) {
        ChineseStr = cnNums[0] + cnIntLast + cnInteger;
        return ChineseStr;
    }
    money = money.toString(); //转换为字符串
    if (money.indexOf(".") == -1) {
        IntegerNum = money;
        DecimalNum = '';
    } else {
        parts = money.split(".");
        IntegerNum = parts[0];
        DecimalNum = parts[1].substr(0, 4);
    }
    if (parseInt(IntegerNum, 10) > 0) { //获取整型部分转换
        let zeroCount = 0;
        let IntLen = IntegerNum.length;
        for (let i = 0; i < IntLen; i++) {
            let n = IntegerNum.substr(i, 1);
            let p = IntLen - i - 1;
            let q = p / 4;
            let m = p % 4;
            if (n == "0") {
                zeroCount++;
            } else {
                if (zeroCount > 0) {
                    ChineseStr += cnNums[0];
                }
                zeroCount = 0;          //归零
                ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
            }
            if (m == 0 && zeroCount < 4) {
                ChineseStr += cnIntUnits[q];
            }
        }
        ChineseStr += cnIntLast;        //整型部分处理完毕
    }
    if (DecimalNum != '') {             //小数部分
        let decLen = DecimalNum.length;
        for (let i = 0; i < decLen; i++) {
            n = DecimalNum.substr(i, 1);
            if (n != '0') {
                ChineseStr += cnNums[Number(n)] + cnDecUnits[i];
            }
        }
    }
    if (ChineseStr == '') {
        ChineseStr += cnNums[0] + cnIntLast + cnInteger;
    } else if (DecimalNum == '') {
        ChineseStr += cnInteger;
    }
    if (ChineseStr.indexOf('分') >= 0 && ChineseStr.indexOf('角') < 0) {          //处理没有角有分的情况
        if (ChineseStr.indexOf('元') > 0) {
            ChineseStr = ChineseStr.substr(0, ChineseStr.indexOf('元') + 1) + '零' + ChineseStr.substr(ChineseStr.indexOf('元') + 1);
        }
    }
    return ChineseStr;
}

7、获取地址中的查询参数

/**
 * @desc 获取地址中的查询参数
 * @param {url} 地址连接(可不传,即为当前地址)
 * @return {object}
 */
function getQueryParam(url) {
    url = url == null ? window.location.href : url;
    const search = url.substring(url.lastIndexOf('?') + 1);
    const queryObj = {};
    const reg = /([^?&=]+)=([^?&=]*)/g;
    search.replace(reg, (rs, $1, $2) => {
        const name = decodeURIComponent($1);
        let val = decodeURIComponent($2);
        val = String(val);
        queryObj[name] = val;
        return rs;
    });
    return queryObj;
}

猜你喜欢

转载自blog.csdn.net/LonewoIf/article/details/86713575