工作中常常很多数据处理操作需要公用,于是抽离出来变为一个个函数,用起来很香,但是由于比较多,手写呢嫌麻烦,这就记一记,以便日后用时ctrl cv一把嗦。
大家都是面向百度编程(手动狗头),来来来,要就拿走
时间戳转化为天时分,倒计时时可使用
说明: time为时间戳
const timeDef = end.getTime() - nowTime.getTime()
const dates = formatDuring(timeDef)
export function formatDuring(time: number | string): arrayData {
const st = Number(time);
const day = parseInt((st / (1000 * 3600 * 24)).toString());
const hour = parseInt(((st % (1000 * 3600 * 24)) / (1000 * 3600)).toString())
const minute = parseInt(((st % (1000 * 3600))/(1000 * 60)).toString())
return [day,hour, minute]
}
时间转为年月日时分
//传入new Date()
export function convertTime(date: Date): string {
let res = '';
if(date.getFullYear()) {
const y = date.getFullYear();
const mo = date.getMonth() + 1 > 10 ? date.getMonth() + 1 : '0'+(date.getMonth()+1)
const d = date.getDate();
const h = date.getHours() > 10 ? date.getHours(): '0'+date.getHours();
const m = date.getMinutes() > 10 ? date.getMinutes(): '0'+date.getMinutes();
res = y+"/"+mo+"/"+d+" "+h+":"+m;
}
return res;
}
当前范围值直至多少天后(前)的值
说明: range前面给’-'返回多少天前,否则多少天后,Delimiter 分隔符
const dateRange = getDateTime("-" + 3);//返回三天前和现在的时间
export function getDateTime(range: string | number, Delimiter = "-"): arrayData {
const date: string[] = [];
const now = new Date();
const rangeStr = range.toString();
if(rangeStr.indexOf("-") === -1){
date[0] = now.toLocaleDateString().replace(/\//g, Delimiter);
date[1] = new Date(now.setDate(now.getDate() + Number(rangeStr)))
.toLocaleDateString().replace(/\//g, Delimiter);
}
else {
date[0] = new Date(now.setDate(now.getDate() - Number(rangeStr.split("-")[1])))
.toLocaleDateString().replace(/\//g, Delimiter)
date[1] = new Date().toLocaleDateString().replace(/\//g, Delimiter);
}
return date;
}
返回两个时间戳相差的天数
export function dateDiffs(start: string, end: string): number {
const sTime = new Date(start).getTime(),
eTime = new Date(end).getTime();
if(sTime && eTime) {
return Math.floor((eTime - sTime)/(1000*3600*24))
}
else {
throw new Error("传入的日期格式错误")
}
}
深度克隆(仅支持数组对象等)
//深克隆
export function deepClone(target) {
//判断拷贝的数据类型
//初始化变量result 成为最终克隆的数据
function checkedType(targets: objectData | arrayData): string {
return Object.prototype.toString.call(targets).slice(8, -1)
}
let result, targetType: string = checkedType(target)
if (targetType === 'Object') {
result = {}
} else if (targetType === 'Array') {
result = [];
} else {
return target
}
//遍历目标数据
for (let i in target) {
let value = target[i]
if (checkedType(value) === 'Object' ||
checkedType(value) === 'Array') {
result[i] = deepClone(value)
} else {
result[i] = value;
}
}
return result
}
清空对象值
// 这个有点鸡肋
export function clearForm(obj: objectData): objectData {
const object: objectData = new Object();
for(let k in obj) {
if(Object.prototype.toString.call(obj[k]) === '[object Object]')
object[k] = {};
else if(Object.prototype.toString.call(obj[k]) === '[object Array]')
object[k] = [];
else object[k] = "";
}
return object;
}
去驼峰
const key: string = k.replace(/([A-Z])/g, '_$1').replace(/[-_\s]+/g, '_').toLowerCase();
驼峰化
const key: string = k.replace(/[-_\s]+(.)?/g, function(match,c) {
return c? c.toUpperCase() : "";
});
防抖:
export class Debounced {
/**
* @param func 需要包装的函数
* @param delay 延迟时间,单位ms
* @param immediate 是否默认执行一次(第一次不延迟)
*/
public use = (func: Function, delay: number, immediate: boolean = false): Function => {
let timer: number | undefined
return ( ...args: any) => {
if (immediate) {
func.apply(this, args) // 确保引用函数的指向正确,并且函数的参数也不变
immediate = false
return
}
clearTimeout(timer)
timer = setTimeout(() => {
func.apply(this, args)
}, delay)
}
}
}
xxx.vue
使用
private debouncedBySatus = new Debounced().use(this.getOrders, 1000, true);
// 用@click = “handleEvent”
private handleEvent(){
//.....
this.debouncedBySatus();
}