zgg-ui
Version:
2.0.1 正式版本 基于 Vue 3、UniApp 和 TypeScript 开发的多端适配移动端 UI 组件库,旨在提供丰富的组件集合,帮助开发者快速构建多端响应式的移动应用界面
146 lines (141 loc) • 4.87 kB
text/typescript
//全局方法
import { getCurrentInstance } from 'vue'
import type { ComponentInternalInstance } from 'vue'
const SECOND = 1000
const MINUTE = 60 * SECOND
const HOUR = 60 * MINUTE
const DAY = 24 * HOUR
/**
* 最大安全整数
*/
export const MAX_SAFE_INTEGER = 9007199254740991
const zMath = {
/**
* 控制数值范围 value小于min取min,大于max取max
* @param value 主题标记
*/
range(min = 0, max = 0, value = 0) {
return Math.max(min, Math.min(max, Number(value)))
},
// 以下为时间处理方法
/**
* 将输入的数字用前导零填充,直到达到指定的目标长度。
* @param num - 要填充的数字。
* @param targetLength - 结果字符串的目标长度,默认为2。
* @returns 填充后的数字字符串。
*/
padZero(num: number, targetLength: number = 2): string {
// 将数字转换为字符串
let str: string = `${num}`
// 当字符串长度小于目标长度时,在前面加'0'
while (str.length < targetLength) {
str = `0${str}`
}
// 返回填充后的字符串
return str
},
/**
* 将时间(以毫秒为单位)解析为天、小时、分钟、秒和毫秒。
* @param time - 以毫秒为单位的时间。
* @returns 包含天、小时、分钟、秒和毫秒的对象。
*/
parseTimeData(time: number): {
days: number
hours: number
minutes: number
seconds: number
milliseconds: number
} {
// 计算天数
const days = Math.floor(time / DAY)
// 计算小时数
const hours = Math.floor((time % DAY) / HOUR)
// 计算分钟数
const minutes = Math.floor((time % HOUR) / MINUTE)
// 计算秒数
const seconds = Math.floor((time % MINUTE) / SECOND)
// 计算毫秒数
const milliseconds = Math.floor(time % SECOND)
// 返回包含天、小时、分钟、秒和毫秒的对象
return {
days,
hours,
minutes,
seconds,
milliseconds,
}
},
/**
* 将时间数据按照指定的格式进行格式化。
* @param format - 格式化字符串,例如 "DD:HH:mm:ss.SSS"。
* @param timeData - 包含天、小时、分钟、秒和毫秒的时间数据对象。
* @returns 格式化后的时间字符串。
*/
parseFormat(
format: string,
timeData: {
days: number
hours: number
minutes: number
seconds: number
milliseconds: number
}
): string {
// 解构时间数据对象
let { days, hours, minutes, seconds, milliseconds } = timeData
// 如果格式化字符串中不存在 "DD" (天),则将天的时间转为小时
if (format.indexOf('DD') === -1) {
hours += days * 24
} else {
// 对天补0并替换格式化字符串中的 "DD"
format = format.replace('DD', this.padZero(days))
}
// 如果格式化字符串中不存在 "HH" (小时),则将小时的时间转为分钟
if (format.indexOf('HH') === -1) {
minutes += hours * 60
} else {
// 对小时补0并替换格式化字符串中的 "HH"
format = format.replace('HH', this.padZero(hours))
}
// 如果格式化字符串中不存在 "mm" (分钟),则将分钟的时间转为秒
if (format.indexOf('mm') === -1) {
seconds += minutes * 60
} else {
// 对分钟补0并替换格式化字符串中的 "mm"
format = format.replace('mm', this.padZero(minutes))
}
// 如果格式化字符串中不存在 "ss" (秒),则将秒的时间转为毫秒
if (format.indexOf('ss') === -1) {
milliseconds += seconds * 1000
} else {
// 对秒补0并替换格式化字符串中的 "ss"
format = format.replace('ss', this.padZero(seconds))
}
// 对毫秒补0并替换格式化字符串中的 "SSS"
return format.replace('SSS', this.padZero(milliseconds, 3))
},
/**
* 判断两个时间(以毫秒为单位)是否在同一秒内。
* @param time1 - 第一个时间,单位为毫秒。
* @param time2 - 第二个时间,单位为毫秒。
* @returns 如果两个时间在同一秒内,则返回 true;否则返回 false。
*/
isSameSecond(time1: number, time2: number): boolean {
// 将时间除以1000并取整,判断两个时间是否在同一秒内
return Math.floor(time1 / 1000) === Math.floor(time2 / 1000)
},
/**
* @description 取一个区间数
* @param {number} min 最小值
* @param {number} max 最大值
* @returns {number} 随机数
*/
random(min: number, max: number): number {
if (min >= 0 && max > 0 && max >= min) {
const gap = max - min + 1
return Math.floor(Math.random() * gap + min)
}
return 0
},
}
export default zMath