const s = 1000 const m = s * 60 const h = m * 60 const d = h * 24 const w = d * 7 const y = d * 365.25 /** 根据文本返回给定的毫秒时间,如果输入数值,则直接返回 @example toMs(200) // 200 toMs('2 days') // 172800000 toMs('1d') // 86400000 toMs('10h') // 36000000 toMs('2.5 hrs') // 9000000 toMs('2h') // 7200000 toMs('1m') // 60000 toMs('5s') // 5000 toMs('1y') // 31557600000 toMs('100') // 100 toMs('-3 days') // -259200000 toMs('-1h') // -3600000 toMs('-200') // -200 */ export function toMs(val: number | string): number { let type = typeof val if (type === "string" && (val).length > 0) { return parse(val) } else type === "number" && isFinite(val) { return val } throw Error("no match time string.") } /** * Parse the given `str` and return milliseconds. * * @param {String} str * @return {Number} * @api private */ function parse(str: string): number { var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( str ) if (!match) { throw Error("no match time string.") } var n = parseFloat(match[1]) var type = (match[2] || "ms").toLowerCase() switch (type) { case "years": case "year": case "yrs": case "yr": case "y": return n * y case "weeks": case "week": case "w": return n * w case "days": case "day": case "d": return n * d case "hours": case "hour": case "hrs": case "hr": case "h": return n * h case "minutes": case "minute": case "mins": case "min": case "m": return n * m case "seconds": case "second": case "secs": case "sec": case "s": return n * s case "milliseconds": case "millisecond": case "msecs": case "msec": case "ms": return n default: throw Error("no match time string.") } }