import dayTs from './Date'; enum timeType { fulltime = 1 } /** * 获取当前时间 * @param type * @returns */ export function GetCurrentTime(type?: timeType): string { if (type === 1) { return dayTs().format("YYYYMMDDHHmmss") } else { return dayTs().format("YYYY-MM-DD HH:mm:ss") } } /** * 是否是指定天数之前 * @param date * @param days * @returns */ export function IsDaysAgo(date: string | number | Date, days: number = 2): boolean { const today = dayTs(); // 当前日期 const target = dayTs(date).format("YYYY-MM-DD HH:mm:ss.SSS"); // 需要判断的日期 // 计算两个日期之间的差异天数 const diffDays = today.diff(target, 'day'); // 如果差异天数大于等于指定天数,则返回 true return diffDays >= days; } /** * 字符串转字节数组 * @param str * @returns */ export function StringToBytes(str: string): Uint8Array { const bytes = new Uint8Array(str.length); for (let i = 0; i < str.length; i++) { bytes[i] = str.charCodeAt(i); } return bytes; } /** * 字符串转ASCII码 */ export function StringToASCII(str: string): number[] { const arr: number[] = []; for (let i = 0; i < str.length; i++) { arr.push(str.charCodeAt(i)); } return arr; } /** * 数组转字节 */ export function ArrayToByteArray(array: number[]): Uint8Array { const buf = new ArrayBuffer(array.length); const view = new Uint8Array(buf); for (let i = 0; i < array.length; i++) { view[i] = array[i] & 0xFF; } return view; } /** * 数字转字节数组 * @param number 要转换的数字 * @param len 字节数 * @returns 返回字节数组 */ export function NumberToByteArray(number: number | string, len: number): number[] { let str = Math.floor(Number(number)).toString(2); if (str.length > len) { console.log('数据长度不对~~'); return []; } const byteString = FillZero(str, len); const arrBytes: number[] = []; for (let i = byteString.length; i > 0; ) { let j = i - 8; if (j < 0) { j = 0; } const s = byteString.slice(j, i); const v = parseInt(s, 2); arrBytes.push(v); i -= 8; } return arrBytes; } /* * 将字符串填充为指定长度的字符串,前面补0 * @param str 要填充的字符串或数字 * @param len 目标长度 * @return 返回填充后的字符串 */ export function FillZero(str: string | number, len: number): string { str = str.toString(); if (str.length >= len || len <= 0) { return str; } const zeroStr = '0'.repeat(len - str.length); return zeroStr + str; } /** * 将数组按指定大小分块 * @param arr 原始数组 * @param size 每块大小(必须 >= 1) * @returns 分块后的二维数组 */ export function CutArray(arr: readonly T[], size: number): T[][] { if (!Array.isArray(arr) || size < 1) return []; const result: T[][] = []; for (let i = 0; i < arr.length; i += size) { result.push(arr.slice(i, i + size)); } return result; } /** * 将GPS坐标从度分格式(DDMM.MMMM)转换为十进制度格式 * @param ddmm - 度分格式坐标(例如 11630.1234 表示116度30.1234分) * @returns 十进制度格式坐标(例如 116.502056666...) */ export function ConvertDdmmToDecimalDegrees(ddmm: number): number { // 提取度数部分:除以100后取整 const degrees = Math.floor(ddmm / 100); // 提取分数部分(包含小数):对100取模 const minutes = ddmm % 100; // 将分数转换为度并相加:1度=60分 return degrees + minutes / 60; } //对象深拷贝 export function DeepClone(target: T): T { // 如果是对象,且不是原始值null if (typeof target === 'object' && target !== null) { // 创建容器 const result: ESObject = Array.isArray(target) ? [] : {}; const keys = Object.keys(target) as Array; //注解二 keys.forEach(key => { Reflect.set(result, key, DeepClone(Reflect.get(target, key))); }); return result; } // 如果是原始值,则直接返回 return target; }