app/utils/tools.js

242 lines
5.4 KiB
JavaScript
Raw Normal View History

2025-03-14 16:27:50 +08:00
/**
* 解析url参数
* @example ?id=12345&a=b
* @return Object {id:12345,a:b}
*/
function urlParse(url) {
let obj = {};
let reg = /[?&][^?&]+=[^?&]+/g;
let arr = url.match(reg);
if (arr) {
arr.forEach((item) => {
let tempArr = item.substring(1).split("=");
let key = decodeURIComponent(tempArr[0]);
let val = decodeURIComponent(tempArr.splice(1).join("="));
obj[key] = val;
});
}
return obj;
}
const getNetworkType = () => {
uni.getNetworkType({
success: (res) => {
if (res.networkType === "none") {
uni.showToast({
title: "网络好像有点问题,请检查后重试!",
duration: 2000,
icon: "none",
});
let pages = getCurrentPages();
if (pages.length) {
let route = pages[pages.length - 1].route;
if (route !== "pages/empty/empty") {
uni.navigateTo({
url: `/pages/empty/empty?type=wifi`,
});
}
} else {
uni.navigateTo({
url: `/pages/empty/empty?type=wifi`,
});
}
}
},
});
};
const throttle = (fn, that, gapTime) => {
// export function throttle(fn, gapTime) {
if (gapTime == null || gapTime == undefined) {
gapTime = 1800;
}
let _lastTime = that.lastTime;
let _nowTime = +new Date();
if (_nowTime - _lastTime > gapTime || !_lastTime) {
fn.apply(that, arguments); //将this和参数传给原函数
that.lastTime = _nowTime;
}
};
/**
* 计算传秒数的倒计时
* @param seconds
* @returns {{day : *, hours : *, minutes : *, seconds : *}}
*/
const countTimeDown = (seconds) => {
const leftTime = (time) => {
if (time < 10) time = "0" + time;
return time + "";
};
return {
day: leftTime(parseInt(seconds / 60 / 60 / 24, 10)),
hours: leftTime(parseInt((seconds / 60 / 60) % 24, 10)),
minutes: leftTime(parseInt((seconds / 60) % 60, 10)),
seconds: leftTime(parseInt(seconds % 60, 10)),
};
};
/**
* 计算当前时间到第二天0点的倒计时[]
* @returns {number}
*/
const theNextDayTime = () => {
const nowDate = new Date();
const time =
new Date(
nowDate.getFullYear(),
nowDate.getMonth(),
nowDate.getDate() + 1,
0,
0,
0
).getTime() - nowDate.getTime();
return parseInt(time / 1000);
};
const graceNumber = (number) => {
if (number == 0) {
return "0";
} else if (number > 999 && number <= 9999) {
return (number / 1000).toFixed(1) + "k";
} else if (number > 9999 && number <= 99999) {
return (number / 10000).toFixed(1) + "w";
} else if (number > 99999) {
return "10w+";
}
return number;
}
// 时间格式化时间为: 多少分钟前、多少天前
// time 2020-09-10 20:20:20
const getDateBeforeNow = (stringTime) => {
stringTime = new Date(stringTime.replace(/-/g, "/"));
let minute = 1000 * 60;
let hour = minute * 60;
let day = hour * 24;
let week = day * 7;
let month = day * 30;
let time1 = new Date().getTime(); //当前的时间戳
let time2 = Date.parse(new Date(stringTime)); //指定时间的时间戳
let time = time1 - time2;
let result = null;
if (time < 0) {
result = stringTime;
} else if (time / month >= 1) {
result = parseInt(time / month) + "月前";
} else if (time / week >= 1) {
result = parseInt(time / week) + "周前";
} else if (time / day >= 1) {
result = parseInt(time / day) + "天前";
} else if (time / hour >= 1) {
result = parseInt(time / hour) + "小时前";
} else if (time / minute >= 1) {
result = parseInt(time / minute) + "分钟前";
} else {
result = "刚刚";
}
return result;
}
// 判断是否为空
const isStrEmpty = (str) => {
if (
str == null ||
str == undefined ||
(typeof str == "object" && str == {}) ||
(typeof str == "string" && str.trim() == "")
) {
return true;
} else {
return false;
}
}
2025-03-28 15:46:11 +08:00
// 获得星座
const getAstro = (m, d) => {
return "魔羯水瓶双鱼白羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯".substr(
m * 2 - (d < "102223444433".charAt(m - 1) - -19) * 2,
2
);
}
// 获得生肖
const getAnimal = (year) => {
year = year % 12;
let animal = "";
switch (year) {
case 1:
animal = "鸡";
break;
case 2:
animal = "狗";
break;
case 3:
animal = "猪";
break;
case 4:
animal = "鼠";
break;
case 5:
animal = "牛";
break;
case 6:
animal = "虎";
break;
case 7:
animal = "兔";
break;
case 8:
animal = "龙";
break;
case 9:
animal = "蛇";
break;
case 10:
animal = "马";
break;
case 11:
animal = "羊";
break;
case 0:
animal = "猴";
break;
}
return animal;
}
// 日期格式化
const dateFormat = (fmt, 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")
);
}
}
return fmt;
}
2025-03-14 16:27:50 +08:00
export {
getNetworkType,
throttle,
countTimeDown,
theNextDayTime,
graceNumber,
2025-03-28 15:46:11 +08:00
getDateBeforeNow,
isStrEmpty,
getAstro,
getAnimal,
dateFormat
2025-03-14 16:27:50 +08:00
};