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;
}