| 
									
										
										
										
											2025-04-10 10:28:07 +08:00
										 |  |  |  | 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; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /** | 
					
						
							| 
									
										
										
										
											2025-06-18 14:42:01 +08:00
										 |  |  |  |  * 数字转字节数组 | 
					
						
							| 
									
										
										
										
											2025-04-10 10:28:07 +08:00
										 |  |  |  |  * @param number 要转换的数字 | 
					
						
							|  |  |  |  |  * @param len 字节数 | 
					
						
							|  |  |  |  |  * @returns 返回字节数组 | 
					
						
							|  |  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2025-06-17 09:06:18 +08:00
										 |  |  |  | export function NumberToByteArray(number: number | string, len: number): number[] { | 
					
						
							|  |  |  |  |   let str = Math.floor(Number(number)).toString(2); | 
					
						
							| 
									
										
										
										
											2025-04-10 10:28:07 +08:00
										 |  |  |  |   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; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-18 15:24:10 +08:00
										 |  |  |  | /* | 
					
						
							|  |  |  |  |   * 将字符串填充为指定长度的字符串,前面补0 | 
					
						
							|  |  |  |  |   * @param str 要填充的字符串或数字 | 
					
						
							|  |  |  |  |   * @param len 目标长度 | 
					
						
							|  |  |  |  |   * @return 返回填充后的字符串 | 
					
						
							|  |  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2025-04-10 10:28:07 +08:00
										 |  |  |  | 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; | 
					
						
							| 
									
										
										
										
											2025-06-18 15:24:10 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /** | 
					
						
							|  |  |  |  |  * 将数组按指定大小分块 | 
					
						
							|  |  |  |  |  * @param arr 原始数组 | 
					
						
							|  |  |  |  |  * @param size 每块大小(必须 >= 1) | 
					
						
							|  |  |  |  |  * @returns 分块后的二维数组 | 
					
						
							|  |  |  |  |  */ | 
					
						
							|  |  |  |  | export function CutArray<T>(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<T extends Object>(target: T): T { | 
					
						
							|  |  |  |  |   // 如果是对象,且不是原始值null | 
					
						
							|  |  |  |  |   if (typeof target === 'object' && target !== null) { | 
					
						
							|  |  |  |  |     // 创建容器 | 
					
						
							|  |  |  |  |     const result: ESObject = Array.isArray(target) ? [] : {}; | 
					
						
							|  |  |  |  |     const keys = Object.keys(target) as Array<keyof T>; //注解二 | 
					
						
							|  |  |  |  |     keys.forEach(key => { | 
					
						
							|  |  |  |  |       Reflect.set(result, key, DeepClone(Reflect.get(target, key))); | 
					
						
							|  |  |  |  |     }); | 
					
						
							|  |  |  |  |     return result; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   // 如果是原始值,则直接返回 | 
					
						
							|  |  |  |  |   return target; | 
					
						
							| 
									
										
										
										
											2025-04-10 10:28:07 +08:00
										 |  |  |  | } |