/**
* Author : gy
* Declare : 公用方法
*/
import config from '@/config'
import {showTip} from '@/utils/common';
import {getToken} from '@/utils/auth'
// 上传图片到服务器
export const cameraFunction = (sourceType) => {
return new Promise((resolve,reject)=>{
uni.chooseImage({
count: 1, //默认9
sourceType: sourceType || ['album','camera'], //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
uni.uploadFile({
url: config.requestUrl + 'api/Oss/UploadFile', //仅为示例,非真实的接口地址
filePath: tempFilePaths[0],
headers: {
Authorization: uni.getStorageSync('token')
},
name: 'file',
success: (uploadFileRes) => {
if(uploadFileRes.statusCode===404){
showTip('请重试,网络有波动')
}else{
showTip('正在上传,请稍等...')
let files = JSON.parse(uploadFileRes.data)
resolve(files)
return files
}
},
fail: (err)=>{
reject(err)
}
});
},
fail: (err)=>{
reject(err)
}
});
})
}
// 校验手机号
export function validateCellphone(tel) {
const cellphoneReg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/; // 手机号正则
return !!tel.match(cellphoneReg);
}
// 校验邮箱
export function validateEmail(email) {
let reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/; // 邮箱正则
return !!email.match(reg);
}
//电话号保留前三位后四位,中间*表示
export function telKeep(value) {
let reg = /^(\d{3})\d*(\d{4})$/;
return value.replace(reg, '$1****$2')
}
// 获取两个字符串中重叠部分红色显示
export function handleMatchString(str, value) {
const stringArr = str.split('');
const result = [];
stringArr.forEach((item) => {
if (value.includes(item)) {
result.push({
title: item,
color: '#FF0000'
});
return false;
}
result.push({
title: item,
color: '#333333'
});
});
return result;
}
// 身份证校验
export function isCardID(sId) {
if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
console.log('你输入的身份证长度或格式错误')
return false
}
//身份证城市
var aCity = {
11: "北京",
12: "天津",
13: "河北",
14: "山西",
15: "内蒙古",
21: "辽宁",
22: "吉林",
23: "黑龙江",
31: "上海",
32: "江苏",
33: "浙江",
34: "安徽",
35: "福建",
36: "江西",
37: "山东",
41: "河南",
42: "湖北",
43: "湖南",
44: "广东",
45: "广西",
46: "海南",
50: "重庆",
51: "四川",
52: "贵州",
53: "云南",
54: "西藏",
61: "陕西",
62: "甘肃",
63: "青海",
64: "宁夏",
65: "新疆",
71: "台湾",
81: "香港",
82: "澳门",
91: "国外"
};
if (!aCity[parseInt(sId.substr(0, 2))]) {
console.log('你的身份证地区非法')
return false
}
// 出生日期验证
var sBirthday = (sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2))).replace(/-/g, "/"),d = new Date(sBirthday)
if (sBirthday != (d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate())) {
console.log('身份证上的出生日期非法')
return false
}
// 身份证号码校验
var sum = 0,
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
codes = "10X98765432"
for (var i = 0; i < sId.length - 1; i++) {
sum += sId[i] * weights[i];
}
var last = codes[sum % 11]; //计算出来的最后一位身份证号码
if (sId[sId.length - 1] != last) {
console.log('你输入的身份证号非法')
return false
}
return true
}
// 通过身份证判断是否成年
export function analyzeIDCard(IDCard){
let age = 0,yearBirth,monthBirth,dayBirth;
//获取用户身份证号码
let userCard = IDCard;
//如果身份证号码为undefind则返回空
if(!userCard){
return age;
}
let reg = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/; //验证身份证号码的正则
if (reg.test(userCard)) {
if (userCard.length == 15) {
let org_birthday = userCard.substring(6, 12);
//获取出生年月日
yearBirth = "19" + org_birthday.substring(0, 2);
monthBirth = org_birthday.substring(2, 4);
dayBirth = org_birthday.substring(4, 6);
} else if (userCard.length == 18) {
//获取出生年月日
yearBirth = userCard.substring(6,10);
monthBirth = userCard.substring(10,12);
dayBirth = userCard.substring(12,14);
}
//获取当前年月日并计算年龄
let myDate = new Date();
let monthNow = myDate.getMonth() + 1;
let dayNow = myDate.getDate();
let age = myDate.getFullYear() - yearBirth;
if(monthNow < monthBirth || (monthNow == monthBirth && dayNow < dayBirth)){
age--;
}
return age;
} else {
return ''
}
}
// 验证数据是否不为空(空值时返回false,null、undefined、空字符串、空数组、空对象都被设定为空)
export function isNotEmpty(value) {
switch (typeof (value)) {
case "undefined": {
return false;
}
case "string": {
return value.length !== 0;
}
case "object": {
if (Array.isArray(value)) {
return value.length !== 0;
} else if (value === null) {
return false;
} else {
return Object.keys(value).length !== 0;
}
}
default:
return true;
}
}
// 获取当前时间
export function getNowDate() {
let date = new Date()
const year = date.getFullYear();
const month = date.getMonth() + 1 >= 10 ? date.getMonth() + 1 : '0' + date.getMonth() + 1;
const day = date.getDate() >= 10 ? date.getDate() : '0' + date.getDate();
const hour = date.getHours() >= 10 ? date.getHours() : '0' + date.getHours();
const minute = date.getMinutes() >= 10 ? date.getMinutes() : '0' + date.getMinutes();
const second = date.getSeconds() >= 10 ? date.getSeconds() : '0' + date.getSeconds();
return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
// 获取日期
export function getDate(time) {
if (time && !(+time > 0)) {
let [tDate, tTime] = time.split(" ");
tDate = tDate.replace(/[^\d]/g, "/");
time = tTime ? `${tDate} ${tTime}` : `${tDate}`;
}
const d = time ? new Date(time) : new Date();
return {
Y: d.getFullYear(),
M: d.getMonth() + 1,
W: d.getDay(), //周几
D: d.getDate(),
h: d.getHours(),
min: d.getMinutes(),
s: d.getSeconds(),
ms: d.getMilliseconds()
}
}
// 转换日期格式
export function formateDate(date, delimiter) {
date = date || new Date()
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
return [year, month, day].map(formatNumber).join(delimiter || '/')
}
// 转换日期时间格式
export function formatTime(date, separator = '-') {
date = date || new Date()
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const hour = date.getHours();
const minute = date.getMinutes();
const second = date.getSeconds();
return [year, month, day].map(formatNumber).join(separator) + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
// 参数转换为json
export function params2json(params = "", slice = "&") {
const result = {};
params.split(slice).forEach((item) => {
let arr = item.split("=");
const key = arr[0] || '', value = arr[1] || '';
if (item && key) {
result[key] = value;
}
});
return result;
}
// 字符串填充
export function padStart(n, len = 2, num = '0') {
n = n.toString();
while (n.length < len) {
n = num + n
}
return n
}
// 一位数前补0
export function formatNumber(n) {
n = n.toString();
return n[1] ? n : '0' + n
}
// 清除空属性
export function searchAssign(value = {}) {
let _copy = Object.assign({}, value);
for (let key in value) {
if (!isNotEmpty(value[key])) {
delete _copy[key];
}
}
return _copy;
}
// filesize转换
export function size2string(size = 0) {
let strSize = "";
if (size >= Math.pow(1024, 4)) {
strSize = (size / Math.pow(1024, 4)).toFixed(2) + "T";
} else if (size >= Math.pow(1024, 3)) {
strSize = (size / Math.pow(1024, 3)).toFixed(2) + "G";
} else if (size > Math.pow(1024, 2)) {
strSize = (size / Math.pow(1024, 2)).toFixed(2) + "M";
} else if (size > 1024) {
strSize = (size / 1024).toFixed(2) + "K";
} else {
strSize = size + "B";
}
return strSize;
}
// 显示时间是否需要秒
export function date2string(date, gap = "-", requireTime = true, requireDate = true, requireSecond = false) {
let tempObj = getDate(date);
const {Y, M, D, h, min, s} = tempObj;
const Dd = `${padStart(Y)}${gap}${padStart(M)}${gap}${padStart(D)}`,
T = requireSecond ? `${padStart(h)}:${padStart(min)}:${padStart(s)}` : `${padStart(h)}:${padStart(min)}`;
let result = requireDate ? `${Dd} ` : '';
requireTime && (result += T);
return result.trim();
}
// 格式化日期 date 日期或日期字符串
export function formatDate(date) {
let YYYY = null;
let M = null;
let MM = null;
let D = null;
let DD = null;
let h = null;
let hh = null;
let m = null;
let mm = null;
let s = null;
let ss = null;
let ms = null;
let ms2 = null;
let ms3 = null;
let ms4 = null;
let dt = null;
// 如果 date 是 String 类型
if (date && isString(date)) {
// 真机运行时,如果直接用 new Date('YYYY-MM-DD hh:mm:ss') 会报 Invalid Date 错误,所以采用下面的方式创建日期
let dtArr = date.replace(/\//g, '.').replace(/-/g, '.').replace(/:/g, '.').replace(/T/g, ' ').replace(' ', '.').replace('Z', '').split('.');
let year = 2020;
let month = 12;
let day = 18;
let hour = 0;
let minute = 0;
let second = 0;
let millisecond = 0;
// 年
if (dtArr.length > 0 && !isNaN(dtArr[0])) {
year = parseInt(dtArr[0]);
}
// 月
if (dtArr.length > 1 && !isNaN(dtArr[1])) {
month = parseInt(dtArr[1]);
}
// 日
if (dtArr.length > 2 && !isNaN(dtArr[2])) {
day = parseInt(dtArr[2]);
}
// 时
if (dtArr.length > 3 && !isNaN(dtArr[3])) {
hour = parseInt(dtArr[3]);
}
// 分
if (dtArr.length > 4 && !isNaN(dtArr[4])) {
minute = parseInt(dtArr[4]);
}
// 秒
if (dtArr.length > 5 && !isNaN(dtArr[5])) {
second = parseInt(dtArr[5]);
}
// 毫秒
if (dtArr.length > 6 && !isNaN(dtArr[6])) {
millisecond = parseInt(dtArr[6]);
}
date = new Date(year, month - 1, day, hour, minute, second, millisecond);
}
// 如果 date 是 Date 类型
if (date && isDate(date)) {
YYYY = date.getFullYear();
M = date.getMonth() + 1;
MM = M >= 10 ? M : '0' + M;
D = date.getDate();
DD = D >= 10 ? D : '0' + D;
h = date.getHours();
hh = h >= 10 ? h : '0' + h;
m = date.getMinutes();
mm = m >= 10 ? m : '0' + m;
s = date.getSeconds();
ss = s >= 10 ? s : '0' + s;
ms = date.getMilliseconds();
ms2 = ms;
ms3 = ms;
ms4 = ms;
if (ms < 10) {
ms2 = '0' + ms;
ms3 = '00' + ms;
ms4 = '000' + ms;
} else if (ms < 100) {
ms3 = '0' + ms;
ms4 = '00' + ms;
} else {
ms4 = '0' + ms;
}
}
// 返回的数据对象
let result = {
YYYY: YYYY,
MM: MM,
M: M,
DD: DD,
D: D,
hh: hh,
h: h,
mm: mm,
m: m,
ss: ss,
s: s,
ms: ms,
ms2: ms2,
ms3: ms3,
ms4: ms4,
dt: date,
f1: `${YYYY}-${MM}-${DD}`,
f2: `${YYYY}年${M}月${D}日`,
f3: `${YYYY}-${MM}-${DD} ${hh}:${mm}`,
f4: `${h}:${m}:${s}`,
f5: `${MM}-${DD}`,
f6: `${YYYY}-${MM}`,
f7: `${YYYY}年${M}月`,
f8: `${h}:${m}`,
f9: `${M}月${D}日`,
notes: 'YYYY(年),MM(月,补0),M(月,不补0),DD(日,补0),D(日,不补0),hh(时,补0),h(时,不补0),mm(分,补0),m(分,不补0),ss(秒,补0),s(秒,不补0),ms(毫秒,不补0),ms2(毫秒,补0到2位),ms3(毫秒,补0到3位),ms4(毫秒,补0到4位),其余的f1,f2,... 看格式就知道了!'
};
return result;
}
// 转换时间
export function customTime(item = '') {
const nowTime = new Date().getTime();
const minuteTime = 60 * 1000;
const hourTime = 60 * minuteTime;
const dayTime = 24 * hourTime;
const monthTime = dayTime * 30;
const yearTime = monthTime * 12;
const historyTime = new Date(item.replace(/-/g, '/')).getTime();
const diffTime = parseInt(nowTime) - parseInt(historyTime);
let descTime;
if (diffTime >= yearTime) {
// 按年算
descTime = parseInt(diffTime / yearTime) + '年前';
} else if (diffTime < yearTime && diffTime >= monthTime) {
//按月算
descTime = parseInt(diffTime / monthTime) + '月前';
} else if (diffTime < monthTime && diffTime >= dayTime) {
//按天算
descTime = parseInt(diffTime / dayTime) + '天前';
} else if (diffTime < dayTime && diffTime >= hourTime) {
//按小时算
descTime = parseInt(diffTime / hourTime) + '小时前';
} else if (diffTime < hourTime && diffTime >= minuteTime) {
//按分钟算
descTime = parseInt(diffTime / minuteTime) + '分钟前';
} else {
descTime = '刚刚';
}
return descTime;
}
// 倒计时
export function countDown(count) {
let d = parseInt(count / (24 * 60 * 60))
d = d < 10 ? "0" + d : d
let h = parseInt(count / (60 * 60) % 24);
h = h < 10 ? "0" + h : h
let m = parseInt(count / 60 % 60);
m = m < 10 ? "0" + m : m
let s = parseInt(count % 60);
s = s < 10 ? "0" + s : s
return d + '天' + h + '时' + m + '分' + s + '秒'
}
// 获取文件后缀
export function getFileExt(fileName = "") {
const index = fileName.lastIndexOf(".");
if (index > 0) {
fileName = fileName.toLowerCase();
return fileName.substring(index + 1);
}
return '';
}
// 获取文件名称
export function getFileName(fileName = "") {
const index = fileName.lastIndexOf(".");
if (index > 0) {
fileName = fileName.toLowerCase();
return fileName.substr(0, index);
}
return '';
}
// 微信本地存储
export function setStorageSync(key, value) {
if (key) {
uni.setStorageSync(key, value);
}
}
export function getStorageSync(key) {
if (key) {
return uni.getStorageSync(key);
}
}
export function removeStorageSync(key) {
if (key) {
return uni.removeStorageSync(key);
}
}
/**
* 判断数据是否是 String 类型
* @param {Any} val 要判断的数据
* @returns {Boolean} true:是;false:不是;
*/
export function isString(val) {
return Object.prototype.toString.call(val) === '[object String]';
}
/**
* 精确判断数据是否是 Date 类型
* @param {Any} val 要判断的数据
* @returns {Boolean} true:是;false:不是;
*/
export function isDate(val) {
return Object.prototype.toString.call(val) === '[object Date]';
}
/**
* 格式化日期
* @param {Date|String} date 日期或日期字符串
*/
export function formatDate(date) {
let YYYY = null;
let M = null;
let MM = null;
let D = null;
let DD = null;
let h = null;
let hh = null;
let m = null;
let mm = null;
let s = null;
let ss = null;
let ms = null;
let ms2 = null;
let ms3 = null;
let ms4 = null;
let dt = null;
// 如果 date 是 String 类型
if (date && isString(date)) {
// 真机运行时,如果直接用 new Date('YYYY-MM-DD hh:mm:ss') 会报 Invalid Date 错误,所以采用下面的方式创建日期
let dtArr = date.replace(/\//g, '.').replace(/-/g, '.').replace(/:/g, '.').replace(/T/g, ' ').replace(' ', '.').replace(
'Z', '').split('.');
let year = 2020;
let month = 12;
let day = 18;
let hour = 0;
let minute = 0;
let second = 0;
let millisecond = 0;
// 年
if (dtArr.length > 0 && !isNaN(dtArr[0])) {
year = parseInt(dtArr[0]);
}
// 月
if (dtArr.length > 1 && !isNaN(dtArr[1])) {
month = parseInt(dtArr[1]);
}
// 日
if (dtArr.length > 2 && !isNaN(dtArr[2])) {
day = parseInt(dtArr[2]);
}
// 时
if (dtArr.length > 3 && !isNaN(dtArr[3])) {
hour = parseInt(dtArr[3]);
}
// 分
if (dtArr.length > 4 && !isNaN(dtArr[4])) {
minute = parseInt(dtArr[4]);
}
// 秒
if (dtArr.length > 5 && !isNaN(dtArr[5])) {
second = parseInt(dtArr[5]);
}
// 毫秒
if (dtArr.length > 6 && !isNaN(dtArr[6])) {
millisecond = parseInt(dtArr[6]);
}
date = new Date(year, month - 1, day, hour, minute, second, millisecond);
}
// 如果 date 是 Date 类型
if (date && this.isDate(date)) {
YYYY = date.getFullYear();
M = date.getMonth() + 1;
MM = M >= 10 ? M : '0' + M;
D = date.getDate();
DD = D >= 10 ? D : '0' + D;
h = date.getHours();
hh = h >= 10 ? h : '0' + h;
m = date.getMinutes();
mm = m >= 10 ? m : '0' + m;
s = date.getSeconds();
ss = s >= 10 ? s : '0' + s;
ms = date.getMilliseconds();
ms2 = ms;
ms3 = ms;
ms4 = ms;
if (ms < 10) {
ms2 = '0' + ms;
ms3 = '00' + ms;
ms4 = '000' + ms;
} else if (ms < 100) {
ms3 = '0' + ms;
ms4 = '00' + ms;
} else {
ms4 = '0' + ms;
}
}
// 返回的数据对象
let result = {
YYYY: YYYY,
MM: MM,
M: M,
DD: DD,
D: D,
hh: hh,
h: h,
mm: mm,
m: m,
ss: ss,
s: s,
ms: ms,
ms2: ms2,
ms3: ms3,
ms4: ms4,
dt: date,
f1: `${YYYY}-${MM}-${DD}`,
f2: `${YYYY}年${M}月${D}日`,
f3: `${YYYY}-${MM}-${DD} ${hh}:${mm}`,
f4: `${h}:${m}:${s}`,
f5: `${MM}-${DD}`,
f6: `${YYYY}-${MM}`,
f7: `${YYYY}年${M}月`,
f8: `${h}:${m}`,
f9: `${M}月${D}日`,
notes: 'YYYY(年),MM(月,补0),M(月,不补0),DD(日,补0),D(日,不补0),hh(时,补0),h(时,不补0),mm(分,补0),m(分,不补0),ss(秒,补0),s(秒,不补0),ms(毫秒,不补0),ms2(毫秒,补0到2位),ms3(毫秒,补0到3位),ms4(毫秒,补0到4位),其余的f1,f2,... 看格式就知道了!'
};
return result;
}
/**
* 计算两个时间是否大于一个月
* @param {String} starDate 进行比较的开始日期 例如:2017-07-08 2017/01/12 日期格式字符串
* @param {String} endDate 进行比较的结束日期 例如:2017-07-08 2017/01/12 日期格式字符串
* @returns {Boolean}
*/
export function getD(startTime, endTime) {
startTime = new Date(startTime)
endTime = new Date(endTime)
var dateToMonth = 0
var startDate = startTime.getDate() + startTime.getHours() / 24 + startTime.getMinutes() / 24 / 60;
var endDate = endTime.getDate() + endTime.getHours() / 24 + endTime.getMinutes() / 24 / 60;
if (endDate >= startDate) {
dateToMonth = 0
} else {
dateToMonth = -1
}
let yearToMonth = (endTime.getYear() - startTime.getYear()) * 12
let monthToMonth = endTime.getMonth() - startTime.getMonth()
return yearToMonth + monthToMonth + dateToMonth
}
//计算获取两个日期之间相差的天数
export function getDaysBetween(sDate1, sDate2) { //sDate1和sDate2是2002-12-18格式
let aDate, oDate1, oDate2, iDays
aDate = sDate1.split("-")
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-18-2002格式
aDate = sDate2.split("-")
oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24) //把相差的毫秒数转换为天数
return iDays
}
//距今几天
export function getDistanceSpecifiedTime(dateTime) {
let time = Date.parse(new Date());
let lasttime = Date.parse(dateTime);
let day = parseInt((time - lasttime) / (1000 * 60 * 60 * 24));
return day
}
//距今几月
export function getMonthTime(val2) {
const date = new Date();
const val1 = date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate()
const date1 = val1.split('-').map(item => Number(item));
const date2 = val2.split('-').map(item => Number(item));
const diff = [0, 0, 0].map((value, index) => date1[index] - date2[index]);
let monthToMonth = `${diff[0] * 12 + diff[1]},${diff[2]}`
return monthToMonth
}
//相差几月零几天
export function daysBetweet(val1, val2) {
const date1 = val1.split('-').map(item => Number(item));
const date2 = val2.split('-').map(item => Number(item));
const diff = [0, 0, 0].map((value, index) => date1[index] - date2[index]);
let time = `${diff[0] * 12 + diff[1]},${diff[2]}`
return time
}
export function px2rpx(px) {
return px * 750 / wx.getSystemInfoSync().windowWidth
}
export function rpx2px(rpx) {
return rpx / 750 * wx.getSystemInfoSync().windowWidth
}
export function formatQuery2Str(query = {}) {
let queryStr = "";
if (isNotEmpty(query)) {
queryStr = '?' + json2params(searchAssign(query));
}
return queryStr;
}
export function json2params(json = {}, slice = "&") {
return Object.keys(json).reduce((acc, item) => {
return acc + "" + item + "=" + json[item] + slice
}, "").slice(0, -1)
}
/**
* 将s转成时分秒
* @param {num} seconds 秒数
*/
export function formateSeconds(seconds) {
let h = 0, m = 0, s = 0
if (seconds >= 3600) {
h = Math.floor(seconds / 3600)
let remain = seconds % 3600
if (remain >= 60) {
m = Math.floor(remain / 60)
s = remain % 60
} else {
s = remain
}
} else if (seconds >= 60) {
h = 0
m = Math.floor(seconds / 60)
s = seconds % 60
} else {
h = 0
m = 0
s = seconds
}
return (h >= 10 ? h : '0' + h) + ":" + (m >= 10 ? m : '0' + m) + ":" + (s >= 10 ? s : '0' + s)
}
// 数组某项转字符串拼接 arr数组 key指定字段 add拼接符
export function arrToIds(arr, key, add=","){
let new_ids = '';
arr.map(h=>{
new_ids += ',' + h[key];
})
if(new_ids!=''){
new_ids = new_ids.substr(1);
}
return new_ids;
}
小程序的功能方法封装文件--utils.js
最新推荐文章于 2024-07-08 22:46:46 发布