eleven-methods
Version:
常用方法累计
254 lines (246 loc) • 10.5 kB
JavaScript
// 数字相关
const elevenNum = {
// 数字转汉字
convertToChinaNum(num) {
var arr1 = new Array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
var arr2 = new Array('', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千', '万', '十', '百', '千', '亿'); //可继续追加更高位转换值
if (!num || isNaN(num)) {
return "零";
}
var english = num.toString().split("")
var result = "";
for (var i = 0; i < english.length; i++) {
var des_i = english.length - 1 - i; //倒序排列设值
result = arr2[i] + result;
var arr1_index = english[des_i];
result = arr1[arr1_index] + result;
}
//将【零千、零百】换成【零】 【十零】换成【十】
result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十');
//合并中间多个零为一个零
result = result.replace(/零+/g, '零');
//将【零亿】换成【亿】【零万】换成【万】
result = result.replace(/零亿/g, '亿').replace(/零万/g, '万');
//将【亿万】换成【亿】
result = result.replace(/亿万/g, '亿');
//移除末尾的零
result = result.replace(/零+$/, '')
//将【零一十】换成【零十】
//result = result.replace(/零一十/g, '零十');//貌似正规读法是零一十
//将【一十】换成【十】
result = result.replace(/^一十/g, '十');
return result;
}
}
// 时间相关
const elevenDay = {
// 获取当前年的年月日组成数组对象返回
getCurrentYTD() {
let date = new Date()
const year = date.getFullYear() // 获取当前年份
// 每年12个月 这是固定的
const list = Array.from({
length: 12
}, (item, index) => {
let month = index + 1
month = String(month).padStart(2, '0')
return {
value: month,
label: `${month}月`,
children: Array.from({
length: elevenDay.mGetDate(year, month, 0)
}, (m, mIndex) => {
let day = mIndex + 1
day = String(day).padStart(2, '0')
return {
value: day,
label: `${day}日`
}
})
}
})
return list
},
// 获取随机年的年月日组成数组对象返回
getCustomYTD(year) {
// 每年12个月 这是固定的
const list = Array.from({
length: 12
}, (item, index) => {
let month = index + 1
month = String(month).padStart(2, '0')
return {
value: month,
label: `${month}月`,
children: Array.from({
length: elevenDay.mGetDate(year, month, 0)
}, (m, mIndex) => {
let day = mIndex + 1
day = String(day).padStart(2, '0')
return {
value: day,
label: `${day}日`
}
})
}
})
return list
},
mGetDate(year, month) {
var d = new Date(year, month, 0);
return d.getDate();
},
// 计算几天后的日期 或者 几天前的日期
AddDays(num) {
var newdate = new Date();
var newtimems = newdate.getTime() + (num * 24 * 60 * 60 * 1000);
newdate.setTime(newtimems);
var time = newdate.getFullYear() + "-" + (newdate.getMonth() + 1) + "-" + newdate.getDate();
return time;
},
// 刚刚 30分钟前 1小时前
calcTimeRange(val) {
let ms = (new Date() - require('dayjs')(val).$d)
let nowYear = new Date().getFullYear()
let msYear = require('dayjs')(val).year()
// 0<时间<30s,显示:刚刚
let justNow = 30000;
// 30s<时间<60s,显示:1分钟前
let oneMin = 60000;
// 60s<时间<60m,显示:x分钟前
let fewMin = 3600000;
// 60m<时间<24h,显示:x小时前
let oneDay = 86400000;
// 24h<时间<48h,显示:昨天
let yesDay = 172800000;
// 2d<时间<7d,显示x天前
let sevenDay = 604800000;
// 7d<时间 且在本年度,显示:m月d日
let ondYear = oneDay * 365;
// else 显示 日期
let timeRange = ''
if (0 < ms && ms <= justNow) {
timeRange = '刚刚'
} else if (justNow < ms && ms <= oneMin) {
timeRange = '1分钟前'
} else if (oneMin < ms && ms <= fewMin) {
let mins = parseInt(ms / oneMin)
timeRange = mins + '分钟前'
} else if (fewMin < ms && ms <= oneDay) {
let hours = parseInt(ms / fewMin)
timeRange = hours + '小时前'
} else if (oneDay < ms && ms <= yesDay) {
timeRange = '昨天'
} else if (yesDay < ms && ms <= sevenDay) {
let days = parseInt(ms / oneDay)
timeRange = days + '天前'
} else if (sevenDay < ms && ms <= ondYear && nowYear == msYear) {
let month = require('dayjs')(val).month()
let day = require('dayjs')(val).date()
timeRange = ++month + '月' + day + '日'
} else {
timeRange = val.split(' ')[0]
}
return timeRange
}
}
// 数组相关
const elevenArr = {
// 数组对象筛选数组 selData 为需要筛选的数组 datas 为总数据 field 为筛选的字段
filterData(selData, datas, field) {
return datas.filter(d => selData.includes(d[field]))
},
// 数组分组为长度为N的二维数组
splitArr(data, senArrLen) {
//处理成len个一组的数据
let data_len = data.length;
let arrOuter_len = data_len % senArrLen === 0 ? data_len / senArrLen : parseInt((data_len /
senArrLen) + '') + 1;
let arrSec_len = data_len > senArrLen ? senArrLen : data_len; //内层数组的长度
let arrOuter = new Array(arrOuter_len); //最外层数组
let arrOuter_index = 0; //外层数组的子元素下标
// console.log(data_len % len);
for (let i = 0; i < data_len; i++) {
if (i % senArrLen === 0) {
arrOuter_index++;
let len = arrSec_len * arrOuter_index;
//将内层数组的长度最小取决于数据长度对len取余,平时最内层由下面赋值决定
arrOuter[arrOuter_index - 1] = new Array(data_len % senArrLen);
if (arrOuter_index === arrOuter_len) //最后一组
data_len % senArrLen === 0 ?
len = data_len % senArrLen + senArrLen * arrOuter_index :
len = data_len % senArrLen + senArrLen * (arrOuter_index - 1);
let arrSec_index = 0; //第二层数组的索引
for (let k = i; k < len; k++) { //第一层数组的开始取决于第二层数组长度*当前第一层的索引
arrOuter[arrOuter_index - 1][arrSec_index] = data[k];
arrSec_index++;
}
}
}
return arrOuter
}
}
// url相关
const elevenUrl = {
getURLString(arg) {
var reg = new RegExp("(^|&)" + arg + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if (r != null)
return unescape(r[2]);
return null;
},
/**
* url地址修改
* @param url 待修改url
* @param arg 修改的参数名
* @param arg_val 修改的具体值
* @returns {String}
*/
changeURLArg(url, arg, arg_val) {
var pattern = arg + '=([^&]*)';
var replaceText = arg + '=' + arg_val;
if (url.match(pattern)) {
var tmp = '/(' + arg + '=)([^&]*)/gi';
tmp = url.replace(eval(tmp), replaceText);
return tmp;
} else {
if (url.match('[\?]')) {
return url + '&' + replaceText;
} else {
return url + '?' + replaceText;
}
}
}
}
// 其他
const elevenOther = {
// 动态引入js
loadJS(url, callback) {
var script = document.createElement('script'),
fn = callback || function () {};
script.type = 'text/javascript';
//IE
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == 'loaded' || script.readyState == 'complete') {
script.onreadystatechange = null;
fn();
}
};
} else {
//其他浏览器
script.onload = function () {
fn();
};
}
script.src = url;
document.getElementsByTagName('head')[0].appendChild(script);
}
}
module.exports = {
elevenNum,
elevenDay,
elevenArr,
elevenUrl,
elevenOther
}