Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 24x 24x 24x 24x 24x 24x 24x 24x 24x 25x 2x 2x 25x 6x 6x 6x 6x 6x 6x 19x 11x 8x 7x 7x 1x 6x 1x 3x 8x 15x | // 参考: https://github.com/vercel/ms/blob/master/src/index.ts
const _ms = 1
const _s = _ms * 1000
const _m = _s * 60
const _h = _m * 60
const _d = _h * 24
const _w = _d * 7
const _y = _d * 365.25
export type MsUnit = 'y' | 'w' | 'd' | 'h' | 'm' | 's' | 'ms'
export type MsNumberValue = number
export type MsStringValue = `${number}${MsUnit}`
export type MsValue = MsNumberValue | MsStringValue
const unitToTimes: Record<MsUnit, number> = Object.create({
y: _y,
w: _w,
d: _d,
h: _h,
m: _m,
s: _s,
ms: _ms,
})
const re = /^(\d+(?:\.\d+)?)(y|w|d|h|m|s|ms)$/
/**
* 获取毫秒值。
*
* @param value 值
* @param unit 单位
* @param returnSeconds 是否返回秒值
*/
export function ms(value: number, unit: MsUnit, returnSeconds?: boolean): number
/**
* 获取毫秒值。
*
* @param value 值
* @param returnSeconds 是否返回秒值
*/
export function ms(value: MsValue, returnSeconds?: boolean): number
export function ms(
value: MsValue,
unit?: MsUnit | boolean,
returnSeconds?: boolean,
): number {
if (typeof unit === 'boolean') {
returnSeconds = unit
unit = undefined
}
let msValue!: number
if (typeof value === 'string' && value.length > 0) {
const match = re.exec(value)
Iif (!match) {
throw new TypeError(`value 值非法: value=${JSON.stringify(value)}`)
}
const v = parseFloat(match[1])
const u: MsUnit = match[2] as any
const t = unitToTimes[u]
msValue = v * t
} else if (typeof value === 'number' && isFinite(value)) {
if (unit != null) {
if (typeof unit === 'string') {
const t = unitToTimes[unit]
if (!t) {
throw new TypeError(`unit 值非法: unit=${JSON.stringify(unit)}`)
}
msValue = value * t
} else {
throw new TypeError('unit 必须是一个字符串')
}
} else {
msValue = value
}
} else {
throw new TypeError('value 必须是字符串或数字')
}
return returnSeconds ? Math.round(msValue / 1000) : msValue
}
|