/** * @description:使用JSON进行深度拷贝 */ export function deepCopy(data) { const copyData = JSON.stringify(data) return JSON.parse(copyData) } /** * @description 将bytes转化 * @param {number} bytes * @return string */ export function bytesToSize(bytes) { if (bytes === 0) return '0 B'; var k = 1000, // or 1024 sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], i = Math.floor(Math.log(bytes) / Math.log(k)); return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i]; } /** * @description 秒转化时分秒 * @param {number} seconds * @return string */ export function formatSeconds(value) { var theTime = parseInt(value);// 秒 var theTime1 = 0;// 分 var theTime2 = 0;// 小时 if (theTime > 60) { theTime1 = parseInt(theTime / 60); theTime = parseInt(theTime % 60); if (theTime1 > 60) { theTime2 = parseInt(theTime1 / 60); theTime1 = parseInt(theTime1 % 60); } } var result = "" + parseInt(theTime) + " 秒"; if (theTime1 > 0) { result = "" + parseInt(theTime1) + " 分" + result; } if (theTime2 > 0) { result = "" + parseInt(theTime2) + " 小时" + result; } return result; } /** * @description:滚动到对应id的位置 * @param {type} id */ export function scrollToID(id) { document.querySelector("#" + id).scrollIntoView({ behavior: "smooth", block: "start", inline: "nearest", }); } /** * @description 根据时间戳获取时间 * @param {*} timestamp 必传,number类型,时间戳数据(10位及以下,10位至13位) * @param {*} format 选传,string类型,提供以下时间格式:YYYY-MM-DD hh:mm:ss、YYYY/MM/DD hh:mm:ss、YYYY.MM.DD hh:mm:ss、YYYY MM DD hh:mm:ss、YYYY年MM月DD日 hh:mm:ss、YYYY-MM-DD、YYYY/MM/DD、YYYY.MM.DD、YYYY MM DD、YYYY年MM月DD日;若不传,则默认为:YYYY-MM-DD * @returns 根据要求的时间格式 * @version V 1.0, Created by YWQ, 2022.10.20 */ export function timestampToTime(timestamp, format) { //时间戳为10位需*1000,时间戳为13位不需乘1000 const length = timestamp && timestamp.length ? timestamp.length : '' if (!length) return "" let date if (length <= 10) { date = new Date(timestamp * 1000) } else { date = new Date(timestamp) } let Y = String(date.getFullYear()) let M = String(date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) let D = String(date.getDate() + 1 < 10 ? '0' + (date.getDate()) : date.getDate()) let h = String(date.getHours() + 1 < 10 ? '0' + (date.getHours()) : date.getHours()) let m = String(date.getMinutes() + 1 < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) let s = String(date.getSeconds() + 1 < 10 ? '0' + (date.getSeconds()) : date.getSeconds()) // return Y + M + D + h + m + s if (format == "YYYY-MM-DD hh:mm:ss") { return Y + "-" + M + "-" + D + " " + h + ":" + m + ":" + s } else if (format == "YYYY/MM/DD hh:mm:ss") { return Y + "/" + M + "/" + D + " " + h + ":" + m + ":" + s } else if (format == "YYYY.MM.DD hh:mm:ss") { return Y + "." + M + "." + D + " " + h + ":" + m + ":" + s } else if (format == "YYYY MM DD hh:mm:ss") { return Y + " " + M + " " + D + " " + h + ":" + m + ":" + s } else if (format == "YYYY年MM月DD日 hh:mm:ss") { return Y + "年" + M + "月" + D + "日" + " " + h + ":" + m + ":" + s } else if (format == "YYYY-MM-DD") { return Y + "-" + M + "-" + D } else if (format == "YYYY/MM/DD") { return Y + "/" + M + "/" + D } else if (format == "YYYY.MM.DD") { return Y + "." + M + "." + D } else if (format == "YYYY MM DD") { return Y + " " + M + " " + D } else if (format == "YYYY年MM月DD日") { return Y + "年" + M + "月" + D + "日" } else { return Y + "-" + M + "-" + D } } // /** // * @description:获取设备类型 // * @returns PC端为null,移动端为设备类型(Array) // */ // export function getDeviceType() { // return navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) // } /** * @description:根据经纬度计算距离 * @param {*} locationInfo (lat1, lng1, lat2, lng2) * @return: distanceObj: { distance , distance_str } */ export function getDistances(lat1, lng1, lat2, lng2) { function rad(d) { return d * Math.PI / 180.0; } var radLat1 = rad(lat1); var radLat2 = rad(lat2); var a = radLat1 - radLat2; var b = rad(lng1) - rad(lng2); 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; var distance = s; var distance_str = ""; if (parseInt(distance) >= 1) { distance_str = distance.toFixed(2) + "km"; } else { distance_str = (distance * 1000).toFixed(2) + "m"; } let objData = { distance: distance, distance_str: distance_str } return objData } /** * @description:文本打字机 * @param {*} data (text,target,duration) */ export function typeWriter(text, target, duration) { let i = 0; let timer = setInterval(() => { target += text[i]; if (i + 1 == text.length) { clearInterval(timer); } else { i++; } }, duration || 100); }