pnkx-admin-mongo/pnkx-uniapp/utils/pnkx.js

179 lines
4.8 KiB
JavaScript
Raw Normal View History

2024-01-13 13:29:20 +08:00
/**
* 日期格式化
* @param {Object} time
* @param {Object} pattern
*/
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = 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) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
/**
* 获取当前时间
* @returns {string}
*/
export function getNow() {
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() < 9 ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1);
let day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
let seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
let now = year + "-" + month + "-" + day + " " + hours + ":" + minutes + ':' + seconds;
return now
};
/**
* 数组求和
* @param arr 数组
* @param key key
* @returns {number}
*/
export function arraySum(arr, key) {
if (!arr) {
return 0
}
let res = 0;
arr.forEach(item => {
res += Number(item[key])
})
return res
};
/**
* 完整计算时间差(小时分钟)
* @param d1 时间点
* @param d2
* @returns {string}
*/
export function getTimeDifference(d1, d2) {
//如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
let dateBegin = new Date(d1.replace(/-/g, "/"));//将-转化为/使用new Date
let dateEnd;
if (d2) {
dateEnd = new Date(d2.replace(/-/g, "/"))
} else {
dateEnd = new Date();//获取当前时间
}
let dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
let leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
let hours = Math.floor(leave1 / (3600 * 1000))//计算出小时数
//计算相差分钟数
let leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
let minutes = Math.floor(leave2 / (60 * 1000))//计算相差分钟数
//计算相差秒数
let leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
let seconds = Math.round(leave3 / 1000)
return dayDiff + "天" + hours + "小时" + minutes + "分钟" + seconds + "秒"
};
/**
* 排序从大到小
* @param ary
* @param key
* @returns {*}
*/
export function sortDesByKey(ary, key) {
return ary.sort((a, b) => {
let x = a[key];
let y = b[key];
return ((x < y) ? 1 : (x > y) ? -1 : 0)
})
};
/**
* 排序从小到大
* @param ary
* @param key
* @returns {*}
*/
export function sortAscByKey(ary, key) {
return ary.sort((a, b) => {
let x = a[key];
let y = b[key];
return ((x < y) ? -1 : (x > y) ? 1 : 0)
})
};
/**
* 防抖
* @param fn 函数
* @param delay 等待时间
* @returns {function(...[*]=)}
*/
// 防抖定时函数
let debounceTimer = null;
export function debounce(fn, delay = 1000){
return function() {
if(debounceTimer){
clearTimeout(debounceTimer) //进入该分支语句,说明当前正在一个计时过程中,并且又触发了相同事件。所以要取消当前的计时,重新开始计时
debounceTimer = setTimeout(fn,delay)
}else{
debounceTimer = setTimeout(fn,delay) // 进入该分支说明当前并没有在计时,那么就开始一个计时
}
}
}
/**
* 节流
* @param fn 函数
* @param delay 等待时间
* @returns {function(...[*]=)}
*/
let throttleValid = true;
export function throttle(fn,delay){
return function() {
if(!throttleValid){
//休息时间 暂不接客
return false
}
// 工作时间,执行函数并且在间隔期内把状态位设为无效
throttleValid = false
setTimeout(() => {
fn()
throttleValid = true;
}, delay)
}
}