/*
目录:
(1)序列化时间 / 获取当前序列化后的时间 dateFormat
(2)获取当前日期前或指定时间,前一定范围的时间 getAssignTime
(3)判断是否是1366分辨率 is1366Screen
(4)获取echarts中X轴数据 getXList
(5)函数防抖 debounce
(6)函数节流 throttle
(7)获取url后面的参数 queryUrlParameter
*/
/** (1)
* @description: 序列化时间 / 获取时间
* @param {*} fmt 间格式参数
* @param {*} date 为时间对象,默认为当前时间 eg: new Date()
* @return {*}
*/
function dateFormat(fmt, date) {
date = date || new Date(); // 判断是否传参
let ret;
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
// fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
if (ret[1].length == 1) {
fmt = fmt.replace(ret[1], opt[k]);
} else {
for (let i = opt[k].length; i < ret[1].length; i++) {
opt[k] = '0' + opt[k];
}
fmt = fmt.replace(ret[1], opt[k]);
}
}
}
return fmt;
}
/**(2)
* @description: 获取当前日期前或者后指定时间
* @param {*} compareTime 对比的时间数
* @param {*} type 需要获得在原来对比的时间类型 d---日 M---月 y---年 h---时 m---分
* @param {*} date 默认为当前时间
* @param {*} format 时间格式化 -- 参照dateFormat函数 默认为YYYY-mm-dd
* @return {*}
*/
function getAssignTime(compareTime, type, date, format) {
date = date || new Date(); // 判断是否传参
format = format || "YYYY-mm-dd";
switch (type) {
case 'd':
date = date.setDate((date.getDate() - compareTime))
date = dateFormat(format, new Date(date));
break;
case 'M':
date = date.setMonth((date.getMonth() - compareTime))
date = dateFormat(format, new Date(date));
break;
case 'y':
date = date.setYear((date.getFullYear() - compareTime))
date = dateFormat(format, new Date(date));
break;
case 'h':
date = date.setHours((date.getHours() - compareTime))
date = dateFormat(format, new Date(date));
break;
}
return date;
}
/** (3)
* @description: 判断是否是1366分辨率
* @param {*}
* @return {*} 返回true or false
*/
function is1366Screen() {
let screenWidth = document.body.clientWidth;
if (screenWidth < 1400) {
return true;
} else {
return false;
}
}
/** (4)
* @description: 获取echarts中X轴数据
* @param {*} type 需要获取的类型 day - 日 month - 月 year - 年
* @param {*} length 需要获取的长度 往前数
* @return {*}
*/
function getXList(type, length) {
var lastMonth = [];
for (var i = 0; i < length; i++) {
lastMonth.unshift(new Date(new Date()
.setDate(new Date().getDate() - i))
.toLocaleString().substring(0, 10))
}
return lastMonth
}
/** (5)
* @desc 函数防抖
* @param func 函数
* @param wait 延迟执行毫秒数
* @param immediate true 表立即执行,false 表非立即执行
*/
function debounce(func, wait, immediate) {
let timeout;
return function () {
const context = this;
const args = [...arguments];
if (timeout) clearTimeout(timeout);
if (immediate) {
const callNow = !timeout;
timeout = setTimeout(() => {
timeout = null;
}, wait)
if (callNow) func.apply(context, args)
} else {
timeout = setTimeout(() => {
func.apply(context, args)
}, wait);
}
}
}
/** (6)
* @desc 函数节流
* @param func 函数
* @param wait 延迟执行毫秒数
* @param type 1 表时间戳版,2 表定时器版
*/
function throttle(func, wait, type) {
let previous, timeout;
if (type === 1) {
previous = 0;
} else if (type === 2) {
timeout;
}
return function () {
let context = this;
let args = arguments;
if (type === 1) {
let now = Date.now();
if (now - previous > wait) {
func.apply(context, args);
previous = now;
}
} else if (type === 2) {
if (!timeout) {
timeout = setTimeout(() => {
timeout = null;
func.apply(context, args)
}, wait)
}
}
}
}
/** (7)
* @description: 获取url后面的参数
* @param {*} str - url
* @return {*} 对象
*/
function queryUrlParameter(str) {
let obj = {}
let reg = /([^?=&#]+)=([^?=&#]+)/g;
str.replace(reg, function () {
obj[arguments[1]] = arguments[2]
})
//如果加上hash
// reg = /#([^?&=#]+)/g
// if (reg.test(str)) {
// str.replace(reg, function () {
// obj.hash = arguments[1]
// })
// }
return obj
}