zhwl-miniapp/common/utils.js
2025-06-26 12:38:35 +08:00

190 lines
7.2 KiB
JavaScript
Raw Permalink 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.

import httpConfig from "@/common/http/config"
export default {
//时间格式化
formatDate (formats, timestamp) {
var formats = formats || 'Y-M-D';
var myDate = timestamp ? new Date(timestamp) : new Date();
var year = myDate.getFullYear();
var month = formatDigit(myDate.getMonth() + 1);
var day = formatDigit(myDate.getDate());
var hour = formatDigit(myDate.getHours());
var minute = formatDigit(myDate.getMinutes());
var second = formatDigit(myDate.getSeconds());
return formats.replace(/Y|M|D|h|m|s/g, function(matches) {
return ({
Y: year,
M: month,
D: day,
h: hour,
m: minute,
s: second
})[matches];
});
// 小于10补0
function formatDigit (n) {
return n.toString().replace(/^(\d)$/, '0$1');
}
},
// 正则验证
checkStr(str,type) {
switch (type){
case 'mobile': //电话
return /^1[3|4|5|6|7|8|9][0-9]\d{8}$/.test(str)
case 'card': //身份证
return /^[\d]{6}(19|20)?[\d]{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[0-9]{3}[xX\d]$/.test(str)
case 'email': //邮箱
return /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(str)
case 'qq': //qq
return /^[1-9][0-9]{4,10}$/.test(str)
case 'postcode': //邮编
return /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/.test(str)
case 'int': //整数
return /^-?\d+$/.test(str)
case 'posint': //正整数
return /^\d+$/.test(str)
case 'negint': //负整数
return /^-\d+$/.test(str)
case 'num': //数字
return /^-?\d*\.?\d+$/.test(str)
case 'posnum': //正数
return /^\d*\.?\d+$/.test(str)
case 'negnum': //负数
return /^-\d*\.?\d+$/.test(str)
case 'nposint': //非0正整数
return /^\+?[1-9][0-9]*$/.test(str)
case 'nnegint': //非0负整数
return /^\-?[1-9][0-9]*$/.test(str)
case 'price': //价格
return /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/.test(str)
case 'money': //金额(小数点2位)
return /^\d*(?:\.\d{0,2})?$/.test(str);
default:
return true
}
},
// 当前日期加固定天数
getNumDay (num) {
const currentDate = new Date();
currentDate.setDate(currentDate.getDate() + num);
return currentDate.toISOString();
},
// 判断是否再有效期
isDateValid (startDate, endDate, date) {
var currentDate = new Date();
if (date) currentDate = new Date(date);
return currentDate > new Date(startDate + ' 00:00:00') && currentDate < new Date(endDate + ' 23:59:59');
},
// 判断指定日期是否小于今天
isDateLessThanToday (date, nowDate) {
var currentDate = new Date();
if (nowDate) currentDate = new Date(nowDate);
return currentDate < new Date(date + ' 23:59:59');
},
// 获取指定日期为周几
getDayOfWeek (dateString) {
const days = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
const date = new Date(dateString);
return days[date.getDay()];
},
// 获取指定日期的三天
getDateList (dateStr) {
const date = new Date(dateStr);
let nextThreeDays = [];
for (let i = 0; i < 3; i++) {
const day = new Date(date);
day.setDate(day.getDate() + i);
nextThreeDays.push(day.toISOString().split('T')[0]);
}
return nextThreeDays;
},
// 获取指定日期的上一天几下一天
getNewDate (str, isPurchaseDate, beforeDay) {
const date = new Date(str);
let day = '';
if (isPurchaseDate == '1') {
let now = new Date();
day = new Date(now.setDate(now.getDate() + beforeDay))
} else day = new Date();
if (date.toISOString().split('T')[0] == day.toISOString().split('T')[0]) {// 选择的当天
return this.getDateList(date)
} else {// 选择的之后日期
let arr = [];
const res = new Date(date);
let prev = new Date(res.setDate(res.getDate() - 1));
let next = new Date(res.setDate(res.getDate() + 2));
arr = [prev.toISOString().split('T')[0], date.toISOString().split('T')[0], next.toISOString().split('T')[0]]
return arr;
}
},
// 截取年月日
splitDate (str) {
let newstr = str.substr(0, 10);
let arr = newstr.split('-');
return arr[0] + '年' + arr[1] + '月' + arr[2] + '日 ' + str.substr(11, str.length - 1);
},
// 截取年月
splitDates (str) {
let newstr = str.substr(0, 10);
let arr = newstr.split('-');
return arr[0] + '年' + arr[1] + '月';
},
// 数组分类
resetArr (arr, key) {
let tempArr = [];// 分类属性项
var newArr = [];
arr.forEach((i, index) => {
if (tempArr.indexOf(i[key]) === -1) {
newArr.push({
time: i[key],
data: [i]
});
tempArr.push(i[key]);
} else {
newArr[tempArr.indexOf(i[key])].data.push(i)
}
});
return newArr;
},
setImgUrl (image) {
return image ? (httpConfig.url + image) : ''
},
replaceImg (a) {
let returnstr = a;
if (a) {
// a 为富文本的字符串内容为了测试只写了img标签
var b = /<img [^>]*src=['"]([^'"]+)[^>]*>/g;// img 标签取src里面内容的正则
var s = a.match(b);// 取到所有img标签 放到数组 s里面
if (s) {
for (var i = 0; i < s.length; i++) {
var srcImg = s[i].replace(b, '$1');//取src面的内容
if (srcImg.slice(0, 4) == 'http' || srcImg.slice(0, 5) == 'https' || srcImg.slice(0, 10) == 'data:image') {
//若src前4位置或者前5位是http、https则不做任何修改
} else {
//修改富文本字符串内容 img标签src 相对路径改为绝对路径
let str = srcImg.substr(9, srcImg.length - 1);
returnstr = returnstr.replace(new RegExp(srcImg, 'g'), httpConfig.url + str);
}
}
}
}
console.log(returnstr)
return returnstr;
},
getDistance(lat1, lng1, lat2, lng2) {
var radLat1 = toRadians(lat1);
var radLat2 = toRadians(lat2);
var deltaLat = radLat1 - radLat2;
var deltaLng = toRadians(lng1) - toRadians(lng2);
var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
let dd = (dis * 6378137).toFixed(0);
if(+dd>1000){
return (dd/1000).toFixed(2)+'km';
}else{
return dd+'m';
}
function toRadians(d) {
return d * Math.PI / 180;
}
}
}