pnkx-admin-mongo/pnkx-uniapp/utils/pnkx.js
2024-01-13 13:29:20 +08:00

179 lines
4.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 日期格式化
* @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)
}
}