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, }