diff --git a/src/utils/Time.ts b/src/utils/Time.ts index b07dd53..509ce53 100644 --- a/src/utils/Time.ts +++ b/src/utils/Time.ts @@ -94,4 +94,58 @@ export default class Time { } return `${minutes.toString().padStart(2, "0")}:${second.toString().padStart(2, "0")}`; } + + /** + * 将时间字符串解析为毫秒值 + * + *

支持的格式示例: + *

+	 * 10               = 10
+	 * 10ms             = 10
+	 * 10s              = 10,000
+	 * 10m              = 600,000
+	 * 10h              = 36,000,000
+	 * 10d = 10D = 10 d = 864,000,000
+	 * 10.5d            = 907,200,000
+	 * 
+ * + * @param timeStr 时间字符串 + * @return 毫秒 + * @throws Error 输入格式无效 + */ + public static parseToMS(timeStr: string): number { + if (!timeStr || timeStr.trim() === "") { + throw new Error("not found timeStr"); + } + const normalized = timeStr.replace(/\s+/g, "").toLowerCase(); + + const pattern = /^(\d+(?:\.\d+)?)(ms|[dhms])?$/; + const matcher = pattern.exec(normalized); + if (!matcher) { + throw new Error("invalid format: " + timeStr); + } + const value = parseFloat(matcher[1]); + const unit = matcher[2]; + if (!unit || unit === "ms") { + return Math.round(value); + } + let multiplier: number; + switch (unit) { + case "s": + multiplier = Time.S; + break; + case "m": + multiplier = Time.M; + break; + case "h": + multiplier = Time.H; + break; + case "d": + multiplier = Time.D; + break; + default: + throw new Error("invalid format unit: " + unit); + } + return Math.round(value * multiplier); + } }