22 lines
816 B
TypeScript
22 lines
816 B
TypeScript
/** Parse "m:ss" or "h:mm:ss" string to total seconds. Returns 0 on failure. */
|
|
export function parseDuration(duration?: string): number {
|
|
if (!duration) return 0;
|
|
const parts = duration.split(":").map(Number);
|
|
if (parts.some(isNaN)) return 0;
|
|
if (parts.length === 3) return parts[0] * 3600 + parts[1] * 60 + parts[2];
|
|
if (parts.length === 2) return parts[0] * 60 + parts[1];
|
|
return parts[0] || 0;
|
|
}
|
|
|
|
/** Convert seconds to ISO 8601 duration string: "PT3M42S" */
|
|
export function toISO8601Duration(seconds: number): string {
|
|
if (seconds <= 0) return "";
|
|
const h = Math.floor(seconds / 3600);
|
|
const m = Math.floor((seconds % 3600) / 60);
|
|
const s = seconds % 60;
|
|
let result = "PT";
|
|
if (h > 0) result += `${h}H`;
|
|
if (m > 0) result += `${m}M`;
|
|
if (s > 0) result += `${s}S`;
|
|
return result;
|
|
}
|