Files
Goodgame_web/common/utils.js
T
我是个攻城狮 c3f5f13bb3 all
2026-05-27 16:01:15 +08:00

433 lines
11 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export default {
/**
* 计算两地距离
* @param {起始纬度} lat1
* @param {起始经度} lng1
* @param {结束纬度} lat2
* @param {结束经度} lng2
*/
distance(lat1, lng1, lat2, lng2) {
console.log(lat1,lng1,lat2,lng2,'2345678');
var radLat1 = lat1 * Math.PI / 180.0;
var radLat2 = lat2 * Math.PI / 180.0;
var a = radLat1 - radLat2;
var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378.137;
s = Math.round(s * 10000) / 10000;
return s
},
geTel(tel){
let reg = /^(\d{3})\d{4}(\d{4})$/;
return tel.replace(reg, "$1****$2");
},
//得到日期显示
getFormatDate(ta='/') {
let date = new Date();
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? ('0' + MM) : MM;
let d = date.getDate();
d = d < 10 ? ('0' + d) : d;
let h = date.getHours();
h = h < 10 ? ('0' + h) : h;
let m = date.getMinutes();
m = m < 10 ? ('0' + m) : m;
let s = date.getSeconds();
s = s < 10 ? ('0' + s) : s;
return y + ta + MM + ta + d + ' ' + h + ':' + m + ':' + s; //+ ' ' + h + ':' + m + ':' + s
},
getFormatDateNum(e) {
let date = new Date();
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? ('0' + MM) : MM;
let d = date.getDate();
d = d < 10 ? ('0' + d) : d;
let h = date.getHours();
h = h < 10 ? ('0' + h) : h;
let m = date.getMinutes();
m = m < 10 ? ('0' + m) : m;
let s = date.getSeconds();
s = s < 10 ? ('0' + s) : s;
return y + '/' + MM + '/' + d + ' ' + e + ':' + '00' + ':' + '00'; //+ ' ' + h + ':' + m + ':' + s
},
//得到日期显示
getFormatMD() {
let date = new Date();
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? ('0' + MM) : MM;
let d = date.getDate();
d = d < 10 ? ('0' + d) : d;
let h = date.getHours();
h = h < 10 ? ('0' + h) : h;
let m = date.getMinutes();
m = m < 10 ? ('0' + m) : m;
let s = date.getSeconds();
s = s < 10 ? ('0' + s) : s;
return MM + '月' + d + '日';
},
//日期显示
formatDate(value) {
let date = new Date(parseInt(value) * 1000);
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? ('0' + MM) : MM;
let d = date.getDate();
d = d < 10 ? ('0' + d) : d;
let h = date.getHours();
h = h < 10 ? ('0' + h) : h;
let m = date.getMinutes();
m = m < 10 ? ('0' + m) : m;
let s = date.getSeconds();
s = s < 10 ? ('0' + s) : s;
return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
},
//年月日
formatDateYmd(value) {
let date = new Date(parseInt(value) * 1000);
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? ('0' + MM) : MM;
let d = date.getDate();
d = d < 10 ? ('0' + d) : d;
let h = date.getHours();
h = h < 10 ? ('0' + h) : h;
let m = date.getMinutes();
m = m < 10 ? ('0' + m) : m;
let s = date.getSeconds();
s = s < 10 ? ('0' + s) : s;
return y + '-' + MM + '-' + d;
},
//月日
formatDateYm(value) {
let date = new Date(parseInt(value) * 1000);
let y = date.getFullYear();
let MM = date.getMonth() + 1;
MM = MM < 10 ? ('0' + MM) : MM;
let d = date.getDate();
d = d < 10 ? ('0' + d) : d;
let h = date.getHours();
h = h < 10 ? ('0' + h) : h;
let m = date.getMinutes();
m = m < 10 ? ('0' + m) : m;
let s = date.getSeconds();
s = s < 10 ? ('0' + s) : s;
return MM + '.' + d + ' ' + h + ':' + m;
},
toTime(value){
var timestamp = new Date(value).getTime();
return timestamp/1000;
},
time2string(second){
var day = Math.floor(second/(3600*24));
second = second%(3600*24); //除去整天之后剩余的时间
var hour = Math.floor(second/3600);
second = second%3600; //除去整小时之后剩余的时间
var minute = Math.floor(second/60);
second = second%60; //除去整分钟之后剩余的时间
//返回字符串
//return day + '天' + hour + '小时' + minute + '分' + second + '秒';
return {hour,minute,second}
},
/*日期工具*/
dateUtils: {
UNITS: {
'年': 31557600000,
'月': 2629800000,
'天': 86400000,
'小时': 3600000,
'分钟': 60000,
'秒': 1000
},
humanize: function(milliseconds) {
var humanize = '';
for (var key in this.UNITS) {
if (milliseconds >= this.UNITS[key]) {
humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';
break;
}
}
return humanize || '刚刚';
},
format: function(dateStr) {
var date = this.parse(dateStr)
var diff = Date.now() - date.getTime();
if (diff < this.UNITS['天']) {
return this.humanize(diff);
}
var _format = function(number) {
return (number < 10 ? ('0' + number) : number);
};
return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' +
_format(date.getHours()) + ':' + _format(date.getMinutes());
},
parse: function(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串,转化为一个Date对象
var a = str.split(/[^0-9]/);
return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
}
},
friendlyDate(timestamp) {
var formats = {
'year': '%n% 年前',
'month': '%n% 月前',
'day': '%n% 天前',
'hour': '%n% 小时前',
'minute': '%n% 分钟前',
'second': '%n% 秒前',
};
var now = Date.now();
var seconds = Math.floor((now - timestamp) / 1000);
var minutes = Math.floor(seconds / 60);
var hours = Math.floor(minutes / 60);
var days = Math.floor(hours / 24);
var months = Math.floor(days / 30);
var years = Math.floor(months / 12);
var diffType = '';
var diffValue = 0;
if (years > 0) {
diffType = 'year';
diffValue = years;
} else {
if (months > 0) {
diffType = 'month';
diffValue = months;
} else {
if (days > 0) {
diffType = 'day';
diffValue = days;
} else {
if (hours > 0) {
diffType = 'hour';
diffValue = hours;
} else {
if (minutes > 0) {
diffType = 'minute';
diffValue = minutes;
} else {
diffType = 'second';
diffValue = seconds === 0 ? (seconds = 1) : seconds;
}
}
}
}
}
return formats[diffType].replace('%n%', diffValue);
},
//时间显示
formatTime(time) {
if (typeof time !== 'number' || time < 0) {
return time
}
var hour = parseInt(time / 3600)
time = time % 3600
var minute = parseInt(time / 60)
time = time % 60
var second = time
return ([hour, minute, second]).map(function(n) {
n = n.toString()
return n[1] ? n : '0' + n
}).join(':')
},
//经纬度
formatLocation(longitude, latitude) {
if (typeof longitude === 'string' && typeof latitude === 'string') {
longitude = parseFloat(longitude)
latitude = parseFloat(latitude)
}
longitude = longitude.toFixed(2)
latitude = latitude.toFixed(2)
return {
longitude: longitude.toString().split('.'),
latitude: latitude.toString().split('.')
}
},
/*
* 将cityNo 转 cityName
* cityData:原数据
* cityNo:二级地区编码
*/
getCityName(cityData, cityNo) {
if (!cityNo) return;
if (!(cityData instanceof Array)) return;
// 9112
cityNo += "";
for (let i = 0; i < cityData.length; i++) {
let sheng = cityData[i];
for (let j = 0; j < sheng.children.length; j++) {
let shi = sheng.children[j];
if (shi.value == cityNo) {
// 使用return 终止循环
return `${sheng.label}-${shi.label}`;
}
}
}
},
removeTime(dateStr) {
const date = new Date(dateStr);
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
},
/*
* obj 转 params字符串参数
* 例子:{a:1,b:2} => a=1&b=2
*/
objParseParam(obj) {
let paramsStr = "";
if (obj instanceof Array) return paramsStr;
if (!(obj instanceof Object)) return paramsStr;
for (let key in obj) {
paramsStr += `${key}=${obj[key]}&`;
}
return paramsStr.substring(0, paramsStr.length - 1);
},
/*
* obj 转 路由地址带参数
* 例子:{a:1,b:2} => /pages/index/index?a=1&b=2
*/
objParseUrlAndParam(path, obj) {
let url = path || "/";
let paramsStr = "";
if (obj instanceof Array) return url;
if (!(obj instanceof Object)) return url;
paramsStr = this.objParseParam(obj);
paramsStr && (url += "?");
url += paramsStr;
return url;
},
/*
* 获取url字符串参数
*/
getRequestParameters(locationhref) {
let href = locationhref || "";
let theRequest = new Object();
let str = href.split("?")[1];
if (str != undefined) {
let strs = str.split("&");
for (let i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
},
/*
* 银行卡每四位空格
*/
formatCardNo(cardNo) {
cardNo += "";
return cardNo.replace(/\s/g, '').replace(/[^\d]/g, '').replace(/(\d{4})(?=\d)/g, '$1 ');
},
/**
* 乘法,解决js精度损失问题
* @param {*} arg1
* @param {*} arg2
*/
accMul(arg1, arg2) {
arg1 = arg1 || 0;
var m = 0,
s1 = arg1.toString(),
s2 = arg2.toString();
try {
m += s1.split(".")[1].length
} catch (e) {}
try {
m += s2.split(".")[1].length
} catch (e) {}
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
},
//数字补齐2位
forMatNum(num) {
return num < 10 ? '0' + num : num + '';
},
//日期
initDays(year, month) {
let totalDays = new Date(year, month, 0).getDate();
let dates = [];
for (let d = 1; d <= totalDays; d++) {
dates.push(forMatNum(d));
};
return dates;
},
//日期
initPicker(start, end, mode = "date", step = 1) {
let initstartDate = new Date(start);
let endDate = new Date(end);
let startYear = initstartDate.getFullYear();
let startMonth = initstartDate.getMonth();
let endYear = endDate.getFullYear();
let years = [],
months = [],
days = [],
hours = [],
minutes = [];
let totalDays = new Date(startYear, startMonth, 0).getDate();
for (let s = startYear; s <= endYear; s++) {
years.push(s + '');
};
for (let m = 1; m <= 12; m++) {
months.push(forMatNum(m));
};
for (let d = 1; d <= totalDays; d++) {
days.push(forMatNum(d));
}
for (let h = 0; h < 24; h++) {
hours.push(forMatNum(h));
}
for (let m = 0; m < 60; m += step) {
minutes.push(forMatNum(m));
}
switch (mode) {
case "date":
return {
years,
months,
days
}
break;
case "yearMonth":
return {
years,
months
}
break;
case "dateTime":
return {
years,
months,
days,
hours,
minutes
}
break;
case "time":
return {
hours,
minutes
}
break;
}
},
// 深拷贝
deepClone(obj){
  let objClone = Array.isArray(obj) ? [] : {};
  if (obj && typeof obj === 'object') {
    for(let key in obj){
      if (obj[key] && typeof obj[key] === 'object'){
        objClone[key] = this.deepClone(obj[key]);
      }else{
        objClone[key] = obj[key]
      }
    }
  }
  return objClone;
}
}