下面将统一封装的一些工具方法整理在utils/index.ts中,便于日后有类似需求可直接使用。
-
格式化时间
调用:
utils.dataFormat(new Date(), 'yyyy-MM-dd hh:mm:ss')
export default {
/**
*
* @param date
* @returns 日期格式化
*/
dataFormat(date: Date, fmt: string): string {
//此处当时间是精确到时把小时精确到小时08时或者20时
var o = {
'M+': date.getMonth() + 1, // 月份
'd+': date.getDate(), // 日
'h+': date.getHours(), // 小时
'm+': date.getMinutes(), // 分
's+': date.getSeconds(), // 秒
'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
S: date.getMilliseconds() // 毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
(date.getFullYear() + '').substr(4 - RegExp.$1.length)
);
}
for (var k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1
? o[k]
: ('00' + o[k]).substr(('' + o[k]).length)
);
}
}
return fmt;
}
}
-
随机产生一个key值
调用:
utils.uuid()
/**
* @description: 产生uuid (随机数函数)
* @return {*}
*/
uuid() {
var s = [];
var hexDigits = '0123456789abcdef';
for (var i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
s[8] = s[13] = s[18] = s[23] = '-';
var uuid = s.join('');
return uuid;
},
-
将时间戳转换成日期格式
调用:
utils.timestampToTime(时间戳)
//将时间戳转换成日期格式
timestampToTime(timestamp) {
var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
var Y = date.getFullYear() + '-';
var M =
(date.getMonth() + 1 < 10
? '0' + (date.getMonth() + 1)
: date.getMonth() + 1) + '-';
var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
var h =
(date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
var m =
date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
var s =
date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
return Y + M + D + h + m;
},
-
开始时间与结束时间之间间隔的所有的半小时数据
调用:
utils.formatDayHalfHours(开始时间, 结束时间)强调下
moment().add()方法: 计算任意指定时间后的任意时间
/**
* @description:开始时间与结束时间之间间隔的所有的半小时数据
* @param {*} startTime 开始时间 endTime 结束时间
* @return {*}
*/
formatDayHalfHours(startDate, endDate) {
let dateList = [];
while (moment(endDate) > moment(startDate)) {
startDate = moment(startDate).add(30, 'm');
dateList.push(moment(startDate).format('YYYY-MM-DD HH:mm:ss'));
}
return dateList;
},
- 阿拉伯1转换为一
/**
* @description: 阿拉伯1转换为一
* @param {*} num
* @return {*}
*/
changeNumToHan(num) {
var arr1 = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
var arr2 = [
'',
'十',
'百',
'千',
'万',
'十',
'百',
'千',
'亿',
'十',
'百',
'千',
'万',
'十',
'百',
'千',
'亿'
];
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, '十');
return result;
},
-
时间推迟或提前
调用:
utils.getDateNew( 'day', 'yyyy-MM-dd', beginDate.value, -6 )
/**
* 时间推迟或者提前
* @param {*} type
* @param {*} formate
* @param {*} currentDate
* @param {*} number
* @returns
*/
getDateNew(
type: string,
format: string,
currentDate: string,
num: number
): string {
if (!currentDate) return;
const nowDate = new Date(currentDate);
switch (type) {
case 'day':
nowDate.setDate(nowDate.getDate() - num);
return this.dataFormat(nowDate, format);
case 'hour':
nowDate.setHours(nowDate.getHours() - num);
// return dataFormat(nowDate, "yyyy-MM-dd hh:mm:ss");
return this.dataFormat(nowDate, format);
case 'mounth':
let year: number | string = nowDate.getFullYear(); //当前年:四位数字
let month: number | string = nowDate.getMonth(); //当前月:0-11
let day: number | string = nowDate.getDate();
//上个月
if (num == -1) {
if (month == 0) {
//如果是0,则说明是1月份,上一个月就是去年的12月
year -= 1;
month = 12;
}
}
if (num == 1) {
month = month + 2;
if (month == 13) {
year += 1;
month = 1;
}
}
if (num == 0) {
month = month + 1;
}
month = month < 10 ? '0' + month : String(month); //月份格式化:月份小于10则追加个0
day = day < 10 ? '0' + day : day;
let lastYearMonth = year + '-' + month + '-' + day;
return lastYearMonth;
}
},
- 补充:a-select的模糊搜索功能,刚开始自己封装了一个模糊搜索方法,后来查阅到
filterOption方法
<a-select
ref="select"
v-model:value="item.value"
:style="{ marginLeft: item.marginLeft, width: item.inputWidth }"
:filter-option="filterOption"
show-search
@change="handleSelectChange($event, item.index)"
>
<a-select-option
:value="ele.label"
v-for="(ele, index) in item.options"
:key="index"
>{{ ele.label }}</a-select-option
>
</a-select>
重点:
const filterOption = (input: string, option: any) => {
console.log('input', input);
console.log('option', option);
// 将输入的内容与显示的内容进行匹配
return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};