186 lines
4.8 KiB
JavaScript
186 lines
4.8 KiB
JavaScript
import Vue from 'vue'
|
|
|
|
function time() {
|
|
return parseInt(Math.round(new Date() / 1000));
|
|
};
|
|
|
|
function datetime(format, timestamp) {
|
|
if (typeof format === 'undefined' || format === null) {
|
|
format = 'Y-m-d h:i:s';
|
|
}
|
|
if (typeof timestamp === 'undefined' || timestamp === null) {
|
|
timestamp = this.time();
|
|
}
|
|
const d = new Date();
|
|
d.setTime(timestamp * 1000);
|
|
const date = {
|
|
"Y": d.getFullYear(),
|
|
"m+": (d.getMonth() + 1) < 10 ? `0${d.getMonth() + 1}` : (d.getMonth() + 1),
|
|
"d+": d.getDate() < 10 ? `0${d.getDate()}` : d.getDate(),
|
|
"h+": d.getHours() < 10 ? `0${d.getHours()}` : d.getHours(),
|
|
"i+": d.getMinutes() < 10 ? `0${d.getMinutes()}` : d.getMinutes(),
|
|
"s+": d.getSeconds() < 10 ? `0${d.getSeconds()}` : d.getSeconds(),
|
|
"q+": Math.floor((d.getMonth() + 3) / 3),
|
|
"S+": d.getMilliseconds(),
|
|
};
|
|
for (let k in date) {
|
|
if (new RegExp("(" + k + ")").test(format)) {
|
|
format = format.replace(RegExp.$1, RegExp.$1.length === 1 ?
|
|
date[k] : ("00" + date[k]).substr(("" + date[k]).length));
|
|
}
|
|
}
|
|
return format;
|
|
};
|
|
|
|
function timeDifference(start_at, end_at) {
|
|
let times = parseInt((end_at - start_at) / 1000);
|
|
let day = 0,
|
|
hour = 0,
|
|
minute = 0,
|
|
second = 0;
|
|
|
|
if (times > 0) {
|
|
day = Math.floor(times / (60 * 60 * 24));
|
|
hour = Math.floor(times / (60 * 60)) - (day * 24);
|
|
minute = Math.floor(times / 60) - (day * 24 * 60) - (hour * 60);
|
|
second = Math.floor(times) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);
|
|
} else {
|
|
return null;
|
|
}
|
|
|
|
return {
|
|
d: day,
|
|
h: hour < 10 ? ('0' + hour) : hour,
|
|
m: minute < 10 ? ('0' + minute) : minute,
|
|
s: second < 10 ? ('0' + second) : second,
|
|
};
|
|
};
|
|
|
|
function earthDistance(location1, location2) {
|
|
const lat1 = parseFloat(location1.lat);
|
|
const lng1 = parseFloat(location1.lng);
|
|
const lat2 = parseFloat(location2.lat);
|
|
const lng2 = parseFloat(location2.lng);
|
|
|
|
const EARTH_RADIUS = 6378137.0; //单位M
|
|
const PI = Math.PI;
|
|
|
|
function getRad(d) {
|
|
return d * PI / 180.0;
|
|
}
|
|
|
|
let f = getRad((lat1 + lat2) / 2);
|
|
let g = getRad((lat1 - lat2) / 2);
|
|
let l = getRad((lng1 - lng2) / 2);
|
|
|
|
let sg = Math.sin(g);
|
|
let sl = Math.sin(l);
|
|
let sf = Math.sin(f);
|
|
|
|
let s, c, w, r, d, h1, h2;
|
|
let a = EARTH_RADIUS;
|
|
let fl = 1 / 298.257;
|
|
|
|
sg = sg * sg;
|
|
sl = sl * sl;
|
|
sf = sf * sf;
|
|
|
|
s = sg * (1 - sl) + (1 - sf) * sl;
|
|
c = (1 - sg) * (1 - sl) + sf * sl;
|
|
|
|
w = Math.atan(Math.sqrt(s / c));
|
|
r = Math.sqrt(s * c) / w;
|
|
d = 2 * w * a;
|
|
h1 = (3 * r - 1) / 2 / c;
|
|
h2 = (3 * r + 1) / 2 / s;
|
|
|
|
return d * (1 + fl * (h1 * sf * (1 - sg) - h2 * (1 - sf) * sg));
|
|
};
|
|
|
|
function randomString(length) {
|
|
const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
let result = '';
|
|
for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
|
|
return result;
|
|
};
|
|
|
|
let timer, flag;
|
|
|
|
function throttle(func, wait = 500, immediate = true) {
|
|
if (immediate) {
|
|
if (!flag) {
|
|
flag = true;
|
|
typeof func === 'function' && func();
|
|
timer = setTimeout(() => {
|
|
flag = false;
|
|
}, wait);
|
|
}
|
|
} else {
|
|
if (!flag) {
|
|
flag = true
|
|
timer = setTimeout(() => {
|
|
flag = false
|
|
typeof func === 'function' && func();
|
|
}, wait);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
let timeout = null;
|
|
|
|
function debounce(func, wait = 500, immediate = false) {
|
|
if (timeout !== null) clearTimeout(timeout);
|
|
if (immediate) {
|
|
let callNow = !timeout;
|
|
timeout = setTimeout(function () {
|
|
timeout = null;
|
|
}, wait);
|
|
if (callNow) typeof func === 'function' && func();
|
|
} else {
|
|
timeout = setTimeout(function () {
|
|
typeof func === 'function' && func();
|
|
}, wait);
|
|
}
|
|
}
|
|
|
|
function px2rpx(px) {
|
|
let { windowWidth } = uni.getStorageSync('system_config');
|
|
windowWidth = (windowWidth > 750) ? 750 : windowWidth;
|
|
return 750 * (px / windowWidth);
|
|
}
|
|
|
|
function rpx2px(rpx) {
|
|
let { windowWidth } = uni.getStorageSync('system_config');
|
|
windowWidth = (windowWidth > 750) ? 750 : windowWidth;
|
|
return (rpx / 750) * windowWidth;
|
|
}
|
|
|
|
function toPage(url, options) {
|
|
uni.navigateTo({
|
|
...{ url: url, },
|
|
...options
|
|
});
|
|
}
|
|
|
|
function toast(title, options) {
|
|
uni.showToast({
|
|
...{ title: title, icon: "none" },
|
|
...options
|
|
});
|
|
}
|
|
|
|
export default {
|
|
time,
|
|
datetime,
|
|
timeDifference,
|
|
earthDistance,
|
|
randomString,
|
|
throttle,
|
|
debounce,
|
|
px2rpx,
|
|
rpx2px,
|
|
toPage,
|
|
toast,
|
|
}
|