add Time.parseToMS
This commit is contained in:
@ -94,4 +94,58 @@ export default class Time {
|
|||||||
}
|
}
|
||||||
return `${minutes.toString().padStart(2, "0")}:${second.toString().padStart(2, "0")}`;
|
return `${minutes.toString().padStart(2, "0")}:${second.toString().padStart(2, "0")}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将时间字符串解析为毫秒值
|
||||||
|
*
|
||||||
|
* <p>支持的格式示例:
|
||||||
|
* <pre>
|
||||||
|
* 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
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user