UNPKG

eleven-methods

Version:

常用方法累计

254 lines (246 loc) 10.5 kB
// 数字相关 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 }